根据重复行添加频率

时间:2015-05-17 14:03:18

标签: r

我有一个数据框dd

     Var1 Freq
76   2189- 1181
458  6186-  813
445  6170-  738
902  61801  650
74   2181-  618
504  6268-  509
905  61804  307
500  6259-  272
910  61889  265
495  6253-  242
73   2180-  224
510  6256- 6407
461  6180- 3254
792        2333
1          2312
467  6186- 2259
212  4019- 1254
4561 6170- 1162
462  6181- 1156
80   2189- 1154
465  6184- 1035

我想在Var1列中搜索重复项并将它们合并,创建Freq列中的频率总和,以便......

     Var1 Freq
76   2189- 2335
458  6186- 3072
445  6170- 1900
902  61801  650
74   2181-  618
504  6268-  509
905  61804  307
500  6259-  272
910  61889  265
495  6253-  242
73   2180-  224
510  6256- 6407
461  6180- 3254
792        2333
1          2312
212  4019- 1254
462  6181- 1156
465  6184- 1035

注意:因此,您不必去搜索差异,Var1值组合为2189-6186-,& 6170-

我想这可以通过[]duplicated()的一些奇特的工作来完成,但我似乎无法绕过它。我很感激任何指导。

此数据的dput可以是found on pastebin

1 个答案:

答案 0 :(得分:5)

这可以通过简单的

来完成
aggregate(Freq ~ Var1, dd, sum)

data.table

library(data.table)
setDT(dd)[, .(Freq = sum(Freq)), by = Var1]

dplyr

library(dplyr)
dd %>%
  group_by(Var1) %>%
  summarise(Freq = sum(Freq))

虽然这会将""的空条目加起来,但不清楚为什么要区别对待

无论哪种方式,data.table都可以使用

达到您的确切输出
setDT(dd)[, if(Var1 == "") .SD else sum(Freq), by = Var1]
#      Var1   V1
#  1: 2189- 2335
#  2: 6186- 3072
#  3: 6170- 1900
#  4: 61801  650
#  5: 2181-  618
#  6: 6268-  509
#  7: 61804  307
#  8: 6259-  272
#  9: 61889  265
# 10: 6253-  242
# 11: 2180-  224
# 12: 6256- 6407
# 13: 6180- 3254
# 14:       2333
# 15:       2312
# 16: 4019- 1254
# 17: 6181- 1156
# 18: 6184- 1035