如何根据使用R的组指定添加列数据?

时间:2011-03-29 20:00:25

标签: r aggregate-functions calculated-columns

我正在使用的数据集类似于下面的数据集(尽管示例的规模要小得多,我正在使用的数据是数千行的数据)并且我无法使用找出如何让R根据组号添加列数据。基本上我希望能够分别为第81组和第66组添加绿色(s),蓝色和红色的数量,然后能够使用该信息来计算百分比。

txt <- "Group Green Blue Red Total
81 15 10 21 46
81 10 10 10 30
81 4 8 0 12
81 42 2 2 46
66 11 9 1 21
66 5 14 5 24 
66 7 5 2 14
66 1 16 3 20
66 22 4 2 28"

dat <- read.table(textConnection(txt), sep = " ", header = TRUE)

我花了很多时间试图弄清楚如何使用我自己的一些功能,希望我会偶然发现它,但是因为我是一个新的基本用户,我觉得就像我撞墙一样,没有帮助就无法前进。

3 个答案:

答案 0 :(得分:4)

一种方法是通过aggregate。假设您的数据位于对象x中:

aggregate(. ~ Group, data=x, FUN=sum)
#   Group Green Blue Red Total
# 1    66    46   48  13   107
# 2    81    71   30  33   134

答案 1 :(得分:2)

上述两个答案都是如何解决此类问题的完美示例。 reshapeplyr

中还有两个其他选项
library(reshape)
cast(melt(dat, "Group"), Group ~ ..., sum)

library(plyr)
ddply(dat, "Group", function(x) colSums(x[, -1]))

答案 2 :(得分:1)

我建议@Joshua的回答更整洁,但你应该学习的两个功能是applytapply。如果a是您的数据集,则:

## apply calculates the sum of each row
> total = apply(a[,2:4], 1, sum)
## tapply calculates the sum based on each group
> tapply(total, a$Group, sum)
 66  81 
107 134