R Programming Language在一个数据框内合并对象

时间:2015-06-23 15:42:05

标签: r dataframe

我目前有一个超过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

4 个答案:

答案 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