【发布时间】:2015-05-11 13:38:07
【问题描述】:
我正在尝试针对不同因素获取数据框中某些变量的平均值。说我有:
time geo var1 var2 var3 var4
1 1990 AT 1 7 13 19
2 1991 AT 2 8 14 20
3 1992 AT 3 9 15 21
4 1990 DE 4 10 16 22
5 1991 DE 5 11 17 23
6 1992 DE 6 12 18 24
我想要:
time geo var1 var2 var3 var4 m_var2 m_var3
1 1990 AT 1 7 13 19 8 14
2 1991 AT 2 8 14 20 8 14
3 1992 AT 3 9 15 21 8 14
4 1990 DE 4 10 16 22 11 17
5 1991 DE 5 11 17 23 11 17
6 1992 DE 6 12 18 24 11 17
我用 by() 和 lapply() 尝试了一些东西,但我认为这进入了 ddply 的方向
require(plyr)
Dataset <- data.frame(time=rep(c(1990:1992),2),geo=c(rep("AT",3),rep("DE",3))
,var1=as.numeric(c(1:6)),var2=as.numeric(c(7:12)),var3=as.numeric(c(13:18)),
var4=as.numeric(c(19:24)))
newvars <- c("var2","var3")
newData <- Dataset[,c("geo",newvars)]
目前,我可以在两个错误之间进行选择:
ddply(newData,newData[,"geo"],colMeans)
#where R apparently thinks AT is the variable?
ddply(newData,"geo",colMeans)
#where R worries about the factor variable not being numeric?
我的 lapply 尝试让我走得很远,但随后给我留下了一个无法返回数据框的列表:
lapply(newvars,function(x){
by(Dataset[x],Dataset[,"geo"],function(x)
rep(colMeans(x,na.rm=T),length(unique(Dataset[,"time"]))))
})
我认为这甚至必须能够使用合并和过滤器,如下所示: Lapply in a dataframe over different variables using filters ,但我不能把它放在一起。任何帮助将不胜感激!
【问题讨论】:
标签: r dataframe data.table plyr