我有一个数据框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。
答案 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