合并具有重复ID的行

时间:2016-12-08 20:03:16

标签: r plyr

我想合并并汇总包含重复ID的每一行的值。

例如,下面的数据框包含重复的符号“LOC102723897”。我想合并这两行并对每列中的值求和,以便为重复的符号显示一行。

> head(y$genes)
  SM01 SM02 SM03 SM04 SM05 SM06 SM07 SM08 SM09 SM10 SM11 SM12 SM13 SM14 SM15 SM16 SM17 SM18 SM19 SM20 SM21 SM22
1   32   29   23   20   27  105   80   64   83   80   94   58  122   76   78   70   34   32   45   42  138   30
2  246  568  437  343  304  291  542  457  608  433  218  329  483  376  410  296  550  533  537  473  296  382
3   30   23   30   13   20   18   23   13   31   11   15   27   36   21   23   25   26   27   37   27   31   16
4 1450 2716 2670 2919 2444 1668 2923 2318 3867 2084 1121 2175 3022 2308 2541 1613 2196 1851 2843 2078 2180 1902
5  288  366  327  334  314  267  550  410  642  475  219  414  679  420  425  308  359  406  550  398  399  268
6   34   59   62   68   42   31   49   45   62   51   40   32   30   39   41   75   54   59   83   99   37   37
  SM23 SM24 SM25 SM26 SM27 SM28 SM29 SM30       Symbol
1   41   23   57  160   84   67   87  113 LOC102723897
2  423  535  624  304  568  495  584  603    LINC01128
3   31   21   49   13   33   31   14   31    LINC00115
4 2453 3041 3590 2343 3450 3725 3336 3850        NOC2L
5  403  347  468  478  502  563  611  577 LOC102723897
6   45   51   56  107   79  105   92  131      PLEKHN1
> dim(y)
[1] 12928    30

我尝试使用plyr根据“符号”列合并行,但它不起作用。

> ddply(y$genes,"Symbol",numcolwise(sum))
> dim(y)
[1] 12928    30
> length(y$genes$Symbol)
[1] 12928
> length(unique(y$genes$Symbol))
[1] 12896

2 个答案:

答案 0 :(得分:2)

您可以在Symbolsum all列上分组。

library(dplyr)
df %>% group_by(Symbol) %>% summarise_all(sum)

使用data.table

library(data.table)
 setDT(df)[ , lapply(.SD, sum),by="Symbol"]

答案 1 :(得分:1)

我们可以使用aggregate

中的base R
aggregate(.~ Symbol, df, FUN = sum)
相关问题