2015-09-05 22 views
1

我有我的DF分成含有500組這樣的列表:如何使用R中的單個函數引用列表的所有組件?

c1=cut(SNP_Allele_Frequency$College_SE,500) 
splitc1=split(SNP_Allele_Frequency,c1,drop=FALSE) 

我需要找到均值爲包含在列表CL所有的500組(水平)的變量。有一種方法可以用一種功能來完成這個過程,而不是重複這個過程500次(如下所示)?

mean(splitc1[[1L]]$ACB)....mean(splitc1[[2L]]$ACB)... 
mean(splitc1[[500L]]$ACB) 

回答

3

首先讓我們做一些重複性的數據:

set.seed(24) 
SNP_Allele_Frequency <- data.frame(College_SE = rnorm(1000), ACB = rnorm(1000)) 

現在使用原始的方法:

c1 <- cut(SNP_Allele_Frequency$College_SE, 50) 
splitc1 <- split(SNP_Allele_Frequency, c1, drop = FALSE) 
lapply(splitc1, function(x) mean(x[["ACB"]])) 

我們可以在dplyr更乾淨做到這一點:

library(dplyr) 
SNP_Allele_Frequency %>% mutate(c1 = cut(SNP_Allele_Frequency$College_SE, 50)) %>% 
         group_by(c1) %>% 
         summarise(meanACB = mean(ACB)) 
+0

我真的很喜歡你用base和a來回答圖書館。獎勵! – Statwonk

+1

還有一個base-R方法,它不需要分割成df:'tapply列表(SNP_Allele_Frequency $ ACB,cut(SNP_Allele_Frequency $ College_SE,50))' – scoa

相關問題