列表中的双循环r
问题描述:
下面是使用模拟数据简化我的问题。我想对列表中的元素执行双重循环以获得一些汇总统计信息。这里是我的数据结构和approchimation的简化:列表中的双循环r
x1 <- runif(10, 5.0, 7.5)
x2 <- runif(10,3,7)
x3 <- runif(10,1,9)
x4 <- rep(1:2, c(6,4))
bag<-data.frame(cbind(x1,x2,x3,x4))
x1 <- runif(10, 5.0, 7.5)
x2 <- runif(10,3,7)
x3 <- runif(10,1,9)
x4 <- rep(1:2, c(6,4))
zul<-data.frame(cbind(x1,x2,x3,x4))
x1 <- runif(10, 5.0, 7.5)
x2 <- runif(10,3,7)
x3 <- runif(10,1,9)
x4 <- rep(1:2, c(6,4))
lwk<-data.frame(cbind(x1,x2,x3,x4))
x1 <- runif(10, 5.0, 7.5)
x2 <- runif(10,3,7)
x3 <- runif(10,1,9)
x4 <- rep(1:2, c(6,4))
job<-data.frame(cbind(x1,x2,x3,x4))
lts <- list(bag,zul,lwk,job)
for (i in 1:4){
colnames(lts[[i]])=c("val1","val2","val3","class")
}
现在我可以得到的,例如,意味着每个列表元素的值1的:
lst.mean.c1<-list()
for (i in 1:4){
lst.mean.c1[[i]]<-mean(lts[[i]]$val1[lts[[i]]$class==1])
}
但想我要的是获取变量value1,value2,value3的所有方法的列表。我试图这样做:
num<-seq(1:3)
idc<-gsub(".val","",gsub(".val","",num))
lts.mean.val<-list()
for (j in 1:4){
for (i in idc){
lts.mean.val[[i]]<-mean(lts[[j]]$val[[i]][lts[[j]]$class==1])
}
}
我没有任何成功。你能帮我
答
例如使用colMeans
在评论中提到:
lapply(lts,
function(x) colMeans(x[,grep("val",names(x))]))
+0
最后一个问题,我如何在列表中的每个元素上转置数据? – Cebs
看看'colMeans' – Sotos
呀,尝试这样做:? lst.mean Cebs
对于'class == 1',然后'lapply lts,函数(i)colMeans(i [i $ class == 1,1:3]))'...(未测试) – Sotos