0
我想在一个循环中执行不同的聚合被应用到我的数据的不同行子集,但它似乎棘手的实现(如果可能的话):我可以使用从数据框中获取的参数进行聚合吗?
t <- data.frame(agg=c(list("field1"=field1, "field2"=field2), ...),
fun=c(mean, ...))
f <- function(x) {
for (i in 1:nrow(t) {
y <- aggregate(x, by=t$agg[i], FUN=t$fun[i])
# do something with y
}
}
一个问题是,该场列表agg
尝试构建数据帧时触发错误(“object'field1'not found”),另一个问题是R不喜欢将函数值分配给fun
(“不能强制类”功能“”到data.frame“)。
附录: 我的数据(只是为了符合上述定义),一个具体的例子是:
> d <- data.frame(field1=round(rnorm(5, 10, 1)),field2=letters[round(rnorm(5, 10, 1))], field3=1:5)
> d
field1 field2 field3
1 11 j 1
2 11 i 2
3 10 j 3
4 12 i 4
5 11 j 5
> with(d, aggregate(d$field3,by=list(field1, field2),FUN=mean))
Group.1 Group.2 x
1 11 i 2
2 12 i 4
3 10 j 3
4 11 j 3
搞小动作在数据帧中的变量名,我还是得到这样的:
> with(d,t <- data.frame(agg=c(list("field1"=field1, "field2"=field2)),fun=c(mean)))
Error in as.data.frame.default(x[[i]], optional = TRUE) :
cannot coerce class ""function"" to a data.frame
'by'参数应该有一个与'x'长度相同的向量。这个条件是否满足?你能提供一个可重复的例子吗? –
为什么你会用这个数据框来代替列表? – LAP
@Leo P:是_“你为什么要用这个数据框而不是列表?”_表示你有一个列表解决方案? –