2013-03-08 50 views
3

如果已經回答了此問題,但已答覆所有信息,請道歉。我已經能夠找到合併數據幀本身或以不同方式合併。我真的很感激任何想法。根據row.names合併數據幀中的行

我有一個非常大,但非常簡單的數據框與約。 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

+1因爲你的問題很酷。 R很酷! – OneChillDude 2013-03-08 15:29:03

+0

您正在尋找的正確術語是「聚合」,而不是「合併」。 – A5C1D2H2I1M1N2O1R2T1 2013-03-08 15:29:06

回答

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