我正在使用的数据集类似于下面的数据集(尽管示例的规模要小得多,我正在使用的数据是数千行的数据)并且我无法使用找出如何让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)
我花了很多时间试图弄清楚如何使用我自己的一些功能,希望我会偶然发现它,但是因为我是一个新的基本用户,我觉得就像我撞墙一样,没有帮助就无法前进。
答案 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)
上述两个答案都是如何解决此类问题的完美示例。 reshape
和plyr
library(reshape)
cast(melt(dat, "Group"), Group ~ ..., sum)
library(plyr)
ddply(dat, "Group", function(x) colSums(x[, -1]))
答案 2 :(得分:1)
我建议@Joshua的回答更整洁,但你应该学习的两个功能是apply
和tapply
。如果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