汇总数据,创建计算重复字符串数量的新列,R

时间:2016-04-06 22:53:14

标签: r aggregate

我有一个名为mydata的数组。列标题是c(“name”,“ID”,“Stuff_A”,“Stuff_B”)。 “name”是一个字符串,“ID”是归属于每个“name”的数字,“Stuff_A”和“Stuff_B”只是我想要求和的数值。如果我使用,

骨料(〜ID +名称,MYDATA,总和)

我得到了我几乎想要的东西。对于具有相同名称和ID的值,将“Stuff_A”和“Stuff_B”相加。但是,我还想在聚合数据中创建一个新列,告诉我找到了每个名称的实例数。有什么想法吗?

编辑:我的意思是将Stuff_A列加在一起,每个对应名称的Stuff_B相同。抱歉。这是一些数据。

a = c(2, 3, 5, 4, 11, 6) 
s = c("A. Sphere", "A. Square", "A. Line", "A. Square","A. Sphere", "A. Square") 
e = c(1111,1112,1113,1112,1111,1112)
b = c(1, 8, 2, 0, 8, 1) 
df = data.frame(s,e, a, b)
colnames(df)<-c("name","id","Stuff_A","Stuff_B")
sumdf<-aggregate(.~name+id,df,sum)

最后一行几乎完成了我想要它做的事情,但我希望第五列有每个名字出现的次数。因此,对于我在这里的模拟数据,我们将在A. Sphere旁边有2个,在A. Square旁边有3个,在A. Line旁边有1个。

编辑2:我确实找到了一个愚蠢的方式。我刚刚在aggregate命令之前创建了一个新列,它复制了names列,重命名了新名称列name_count,并按原样运行了aggregate命令。这很有效。

1 个答案:

答案 0 :(得分:0)

使用库dplyr你可以尝试这样的事情:

library(dplyr)
df %>% group_by(name, id) %>% summarise(sumOfStuffA = sum(Stuff_A), sumOfStuffB = sum(Stuff_B), nObservations = n())

输出如下:

Source: local data frame [3 x 5]
Groups: name [?]

       name    id sumOfStuffA sumOfStuffB nObservations
     (fctr) (dbl)       (dbl)       (dbl)         (int)
1   A. Line  1113           5           2             1
2 A. Sphere  1111          13           9             2
3 A. Square  1112          13           9             3