道歉,如果这个问题已经得到解答,但所有信息都已得到解答。我能够找到与自己合并数据帧或以不同方式合并的方法。我真的很感激任何想法。
我有一个非常大但非常简单的数据框,大约有。 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
正如您所看到的,行2,3和4的名称相同,直到“t”之后的数字,与第8行和第9行相同。我想将类似命名的行合并在一起......
我想最终得到的是:
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
将已合并的行中的值相加。
非常感谢任何想法。
谢谢!
答案 0 :(得分:4)
假设您的data.frame
被称为“SODF”,请从row.names
创建一个向量,从row.names
的末尾删除“t + some digit”并将其用作你的聚合变量。
> 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