我认为这将是一项相对容易完成的任务,但我在这里找不到不专注于基于列条件总结行的示例.我想要实现的是总结列复制,但保持行的唯一性.

我的意思是:

                                 MKC100.1 MKC100.2 MKC100.3 MKC103.1 MKC103.2 MKC103.3 MKC104.2 MKC104.3
299fc0ac11fb4afd0da849a2c45583b3        0        0        0        0        0        0        0        1
9bc2bacdfadf4c1352ffbc991803287c     1183     1666     1318        0        0        0       10       20
38b782d9f01c69c3570fe0edd5864dc0      493      626      543       10        0        0        5        5
6d078397349f7d39c34d237a6ef4cb75    43735    51511    46876        0        0        0        1        0
c22e752b441ee4190f27a3690c5d1206        0        0        0     2795     1128     1956        1        1
f6513affb198fb9845741b61ece8db4b       59       58       82        0        0        0        0        0



structure(list(MKC100.1 = c(0L, 1183L, 493L, 43735L, 0L, 59L), 
    MKC100.2 = c(0L, 1666L, 626L, 51511L, 0L, 58L), MKC100.3 = c(0L, 
    1318L, 543L, 46876L, 0L, 82L), MKC103.1 = c(0L, 0L, 10L, 
    0L, 2795L, 0L), MKC103.2 = c(0L, 0L, 0L, 0L, 1128L, 0L), 
    MKC103.3 = c(0L, 0L, 0L, 0L, 1956L, 0L), MKC104.2 = c(0L, 
    10L, 5L, 1L, 1L, 0L), MKC104.3 = c(1L, 20L, 5L, 0L, 1L, 0L
    )), class = "data.frame", row.names = c("299fc0ac11fb4afd0da849a2c45583b3", 
"9bc2bacdfadf4c1352ffbc991803287c", "38b782d9f01c69c3570fe0edd5864dc0", 
"6d078397349f7d39c34d237a6ef4cb75", "c22e752b441ee4190f27a3690c5d1206", 
"f6513affb198fb9845741b61ece8db4b"))

副本通常有三个,但在它的末尾会附加一个".1"或".2"或".3".我需要基本上将所有这些合并在一起,以便最终得到如下所示的数据帧:

                                MKC100 MKC103   MKC104
299fc0ac11fb4afd0da849a2c45583b3     0        0       1
9bc2bacdfadf4c1352ffbc991803287c     4167     0       30
38b782d9f01c69c3570fe0edd5864dc0     1662     10      10
6d078397349f7d39c34d237a6ef4cb75     142122   0       1 
c22e752b441ee4190f27a3690c5d1206     0        5879    2   
f6513affb198fb9845741b61ece8db4b     199      0       0

有时会删除EDIT个副本,我不会在数据帧中 for each 样本提供所有三个副本.任何副本仍应合并在一起.我已经更新了样本数据以反映此场景.

推荐答案

base R

out <- lapply(split(names(data), sub("\\..*", "", names(data))),
              function(nms) rowSums(data[,nms])) |>
  data.frame()
out
#                                  MKC100 MKC103
# 299fc0ac11fb4afd0da849a2c45583b3      0      0
# 9bc2bacdfadf4c1352ffbc991803287c   4167      0
# 38b782d9f01c69c3570fe0edd5864dc0   1662     10
# 6d078397349f7d39c34d237a6ef4cb75 142122      0
# c22e752b441ee4190f27a3690c5d1206      0   5879
# f6513affb198fb9845741b61ece8db4b    199      0

dplyr+tidyr

这是一种略有不同的方法,我们将旋转/汇总/取消旋转:

library(dplyr)
library(tidyr)
data |>
  tibble::rownames_to_column() |>
  pivot_longer(cols = -rowname) |>
  mutate(name = sub("\\..*", "", name)) |>
  summarize(value = sum(value), .by = c(rowname, name)) |>
  pivot_wider(id_cols = rowname)
# # A tibble: 6 × 3
#   rowname                          MKC100 MKC103
#   <chr>                             <int>  <int>
# 1 299fc0ac11fb4afd0da849a2c45583b3      0      0
# 2 9bc2bacdfadf4c1352ffbc991803287c   4167      0
# 3 38b782d9f01c69c3570fe0edd5864dc0   1662     10
# 4 6d078397349f7d39c34d237a6ef4cb75 142122      0
# 5 c22e752b441ee4190f27a3690c5d1206      0   5879
# 6 f6513affb198fb9845741b61ece8db4b    199      0

如果您需要它们而不是列,您可以添加|> tibble::column_to_rownames().

purrr

library(purrr)
out <- split(names(data), sub("\\..*", "", names(data))) |>
  map_dfc(~ rowSums(data[,.x])) |>
  as.data.frame()
rownames(out) <- rownames(data)
out
#                                  MKC100 MKC103
# 299fc0ac11fb4afd0da849a2c45583b3      0      0
# 9bc2bacdfadf4c1352ffbc991803287c   4167      0
# 38b782d9f01c69c3570fe0edd5864dc0   1662     10
# 6d078397349f7d39c34d237a6ef4cb75 142122      0
# c22e752b441ee4190f27a3690c5d1206      0   5879
# f6513affb198fb9845741b61ece8db4b    199      0

as.data.frame的用法是将其从Tibble改为Tibble,因为tidyVerse和Tibble特别偏向于against行名.

您可能希望考虑完全丢弃行名,或者将它们作为一列放入框架中(就像我在上面对rownames_to-column所做的那样,在基数R中对data$rowname <- rownames(data)很容易做到).

R相关问答推荐

在ggplot的注释表格中突出显示最大值

查找满足SpatRaster中条件的单元格位置

terra nearest()仅为所有`to_id`列返回NA

使用gcuminc,如何使用逗号格式化风险表?

如何通过Docker部署我的shiny 应用程序(多个文件)

使用tidy—select创建一个新的带有mutate的摘要变量

如何得到R中唯一的组合群?

如何根据嵌套元素的名称高效而优雅地确定它属于哪个列表?

R中1到n_1,2到n_2,…,n到n_n的所有组合都是列表中的向量?

根据1个变量绘制 colored颜色 发散的 map ,由另一个变量绘制饱和度,ggplot2不工作

是否有新方法来更改Facet_WRAP(Ggplot2)中条文本的文本 colored颜色 ?

列名具有特殊字符时的循环回归

如何在反曲线图中更改X标签

在R中的数据框上使用Apply()函数时,如何保留非数字列?

如何将EC50值绘制在R中的剂量-react 曲线上?

R没有按顺序显示我的有序系数?

为什么R列名称忽略具有指定名称的向量,而只关注索引?

汇总数据:在跨越()all_of()Dynamic_list_of_vars=>;所选内容不能有缺失值的汇总()中出错

如何将一列相关性转换为R中的相关性矩阵

在子图内和子图之间对齐行数不均匀的表格罗布对