R 如何将聚合与列名称列表一起使用
如何通过传递要汇总的条件和值列表,在函数中抽象R 如何将聚合与列名称列表一起使用,r,aggregate,R,Aggregate,如何通过传递要汇总的条件和值列表,在函数中抽象聚合 # This works fine: x <- data.frame(cond1 = sample(letters[1:3], 500, replace=TRUE), cond2 = sample(LETTERS[1:7], 500, replace = TRUE), cond3 = sample(LETTERS[1:4], 500, replace = TRUE),
聚合
# This works fine:
x <- data.frame(cond1 = sample(letters[1:3], 500, replace=TRUE),
cond2 = sample(LETTERS[1:7], 500, replace = TRUE),
cond3 = sample(LETTERS[1:4], 500, replace = TRUE),
value1 = rnorm(500),
value2 = rnorm(500))
aggregate(cbind(value1,value2) ~ cond1 + cond2, data = x, FUN=sum)
#这很好用:
x您可以使用替代界面来聚合
,该界面不使用公式:
c1 <- c("cond1","cond2","cond3")
v1 <- c("value1","value2")
aggregate(x[v1],by=x[c1],FUN=sum)
cond1 cond2 cond3 value1 value2
1 a A A -3.3025839 -0.98304649
2 b A A 0.6326985 -3.08677485
3 c A A 3.6007853 2.23962265
4 a B A -0.5247620 -0.94644740
5 b B A 0.9242562 2.48268452
6 c B A 6.9215712 0.31512645
c1这正是我需要的!谢谢,它工作得很好!在看到这个答案之前,我已经接受了另一个答案。这个答案是我所面临的下一个抽象层次。R的潜力比我目前知道的要大得多,下一步就是使用mappy()
而不是for()
循环!当出现更好的答案时,可以更改复选标记。我不是要求这样。已经有很多分数了。只是想帮你理解。
c1 <- c("cond1","cond2","cond3")
v1 <- c("value1","value2")
aggregate(x[v1],by=x[c1],FUN=sum)
cond1 cond2 cond3 value1 value2
1 a A A -3.3025839 -0.98304649
2 b A A 0.6326985 -3.08677485
3 c A A 3.6007853 2.23962265
4 a B A -0.5247620 -0.94644740
5 b B A 0.9242562 2.48268452
6 c B A 6.9215712 0.31512645
c1 <- list( c("cond1","cond2","cond3"), c("cond2","cond3"),c("cond3"))
v1 <- list( c("value1","value2"),c("value2"),c("value1"))
mapply(FUN= function(z,y, ...) {aggregate(x[ , y], by=x[z], ...)},
c1, v1, MoreArgs=list(FUN=sum) )
[[1]]
cond1 cond2 cond3 value1 value2
1 a A A 0.19396539 1.11536490
2 b A A -1.20056699 -5.36713982
3 c A A -0.19716521 -2.06737461
4 a B A 1.58880450 -7.62452134
5 b B A -4.68579210 0.47266047
6 c B A 2.70550795 -0.50020883
7 a C A 1.69312219 -4.26851536
8 b C A 0.99236424 4.85013434
snipped remaining 76 rows
[[2]]
cond2 cond3 x
1 A A -6.31914953
2 B A -7.65206970
3 C A 1.36818527
4 D A 3.77492482
5 E A 2.68977303
snipped 23 rows
[[3]]
cond3 x
1 A 8.104481
2 B 17.766659
3 C -14.577315
4 D 4.398249