列表中的双循环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]) 
    } 
} 

我没有任何成功。你能帮我

+0

看看'colMeans' – Sotos

+0

呀,尝试这样做:? lst.mean Cebs

+1

对于'class == 1',然后'lapply lts,函数(i)colMeans(i [i $ class == 1,1:3]))'...(未测试) – Sotos

例如使用colMeans在评论中提到:

lapply(lts, 
    function(x) colMeans(x[,grep("val",names(x))])) 
+0

最后一个问题,我如何在列表中的每个元素上转置数据? – Cebs