基于行名称合并数据框中的行

3
抱歉如果这个问题已经有答案了,但我能找到的所有信息都与合并数据框本身或以不同方式合并有关。我非常感激任何想法。
我有一个非常大但非常简单的数据框,大约有22500行和48列。我想根据行名合并数据框中的某些行,想知道是否有任何方法可以实现这一点。
数据框的一部分看起来像这样:
                         Treatment1 Treatment2 Treatment3 Treatment4 Treatment5
    Nasvi2EG000001t1         28         43         33         25         64
    Nasvi2EG000002t2          0          3          0          0          4
    Nasvi2EG000002t5          0          0          0          0          0
    Nasvi2EG000002t6          0          0          0          0          0
    Nasvi2EG000004t1          1          0          0          0          0
    Nasvi2EG000009t1          0          4          2          0          4
    Nasvi2EG000013t1         21          8         17         19          7
    Nasvi2EG000014t1          0          3          0          0          4
    Nasvi2EG000014t2          0          4          0          0          3

正如您所见,第二行、第三行和第四行的名称在“t”后的数字之前完全相同,第八行和第九行也是如此。我想把这些类似命名的行合并在一起...

我希望最终得到的结果是:

                     Treatment1 Treatment2 Treatment3 Treatment4 Treatment5
    Nasvi2EG000001t1         28         43         33         25         64
    Nasvi2EG000002            0          3          0          0          4
    Nasvi2EG000004t1          1          0          0          0          0
    Nasvi2EG000009t1          0          4          2          0          4
    Nasvi2EG000013t1         21          8         17         19          7
    Nasvi2EG000014            0          7          0          0          7

合并的行中的值会被相加。

如果您有任何想法,将不胜感激。

谢谢!


+1 因为你的问题很酷。R 很酷! - OneChillDude
你要找的正确术语是“聚合”,而不是“合并”。 - A5C1D2H2I1M1N2O1R2T1
1个回答

4
假设你的数据框叫做"SODF",从 row.names 创建一个向量,从末尾删除 "t+一些数字" 并将其用作聚合变量。
> aggvar <- gsub("(t[0-9]+$)", "", rownames(SODF))
> aggregate(. ~ aggvar, SODF, sum)
          aggvar Treatment1 Treatment2 Treatment3 Treatment4 Treatment5
1 Nasvi2EG000001         28         43         33         25         64
2 Nasvi2EG000002          0          3          0          0          4
3 Nasvi2EG000004          1          0          0          0          0
4 Nasvi2EG000009          0          4          2          0          4
5 Nasvi2EG000013         21          8         17         19          7
6 Nasvi2EG000014          0          7          0          0          7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接