2016-09-23 108 views
0

下面是使用模擬數據簡化我的問題。我想對列表中的元素執行雙重循環以獲得一些彙總統計信息。這裏是我的數據結構和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 < - 名單() 爲(我在1:4中){ lst.mean [[i]] < - colMeans(lts [[i]] [lts [[i]] $ class == 1]) } 。但是,在[[.data.frame](lts [[i]],lts [[i]] $ class == 1)中出現錯誤: 未定義列選擇 – Cebs

+1

對於'class == 1',然後'lapply lts,函數(i)colMeans(i [i $ class == 1,1:3]))'...(未測試) – Sotos

回答

3

例如使用colMeans在評論中提到:

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

最後一個問題,我如何在列表中的每個元素上轉置數據? – Cebs