我目前有一个超过1,000个对象的R数据框,每个对象应该有一个唯一的第一个元素,但是有些元素出现不止一次,我想将这些对象合并在一起,所以例如我有:
id frequency name
1 43 George
2 23 John
3 3 Thomas
2 17 John
4 122 James
5 32 Andrew
6 67 Martin
7 12 William
1 3 George
8 6 Zachary
6 3 Martin
9 55 Millard
我想把它变成这样的东西(如果你注意到每个拥有相同id的人都拥有除频率之外的所有相同的信息),其中一切都保持不变,除了我将所有频率加到一个总和中其他人(对于某些身份证可能会重复十次左右:
id frequency name
1 46 George
2 40 John
3 3 Thomas
4 122 James
5 32 Andrew
6 70 Martin
7 12 William
8 6 Zachary
9 55 Millard
答案 0 :(得分:1)
将dplyr
与基础R unique
结合使用非常简单:
dd <- dat %>% group_by(name) %>% mutate(frequency = sum(frequency))
unique(dd)
Source: local data frame [9 x 3]
Groups: name
id frequency name
1 1 46 George
2 2 40 John
3 3 3 Thomas
4 4 122 James
5 5 32 Andrew
6 6 70 Martin
7 7 12 William
8 8 6 Zachary
9 9 55 Millard
答案 1 :(得分:1)
假设DF
是您的data.frame,那么您可以使用aggregate
:
> result <- aggregate(frequency~id+name, sum, data=DF)
> result[order(result$id), ]
id name frequency
2 1 George 46
4 2 John 40
7 3 Thomas 3
3 4 James 122
1 5 Andrew 32
5 6 Martin 70
8 7 William 12
9 8 Zachary 6
6 9 Millard 55
答案 2 :(得分:1)
也可以使用data.table。
library(data.table)
df.dt <- data.table(df)
df.dt[, .(freq=sum(freq)), by=.(id, name)]
修改强>
来自Arun的评论
答案 3 :(得分:1)
使用ddply
library('plyr')
ddply(dat, .(id,name), summarize, frequency = sum(frequency))
# id name frequency
#1 1 George 46
#2 2 John 40
#3 3 Thomas 3
#4 4 James 122
#5 5 Andrew 32
#6 6 Martin 70
#7 7 William 12
#8 8 Zachary 6
#9 9 Millard 55