我有幾個數據幀,a
b
c
d
,每個都有相同的列名。我想找到這些數據幀的平均值和中值。換句話說,構建具有相同的尺寸新mean
和median
數據幀爲a
,b
等在r中查找手段和數據幀的中間值
我可以用一對夫婦for
循環,但我敢打賭,有這樣使用R華而不實的方式內置的功能會更快。
我有幾個數據幀,a
b
c
d
,每個都有相同的列名。我想找到這些數據幀的平均值和中值。換句話說,構建具有相同的尺寸新mean
和median
數據幀爲a
,b
等在r中查找手段和數據幀的中間值
我可以用一對夫婦for
循環,但我敢打賭,有這樣使用R華而不實的方式內置的功能會更快。
繼喬希Ulrich的答案,怎麼樣
library(abind)
apply(abind(a,b,c,d,along=3),c(1,2),median)
? (在適當的切片使用rowMeans
仍將快於apply
荷蘭國際集團mean
...我認爲這是在Biobase
(Bioconductor的)包rowMedians
如果你真的需要速度?)
你可以串數據幀到數據幀的列表,然後使用lapply(myList, mean, ...)
我不知道JD的答案給你你想要什麼,因爲得到的對象不會是相同的尺寸, a
,b
等
把你的data.frames放入列表是一個好的開始。然後,您可以將每個列分組到一個新列表中,cbind
列表成一個矩陣,並在其行上使用apply
。
a <- data.frame(rnorm(10), runif(10))
b <- data.frame(rnorm(10), runif(10))
c <- data.frame(rnorm(10), runif(10))
d <- data.frame(rnorm(10), runif(10))
myList <- list(a,b,c,d)
sapply(1:ncol(a), function(j) { # median
apply(do.call(cbind,lapply(myList,`[`,,j)), 1, median)
})
sapply(1:ncol(a), function(j) { # mean
apply(do.call(cbind,lapply(myList,`[`,,j)), 1, mean)
})
sapply(1:ncol(a), function(j) { # faster mean
rowMeans(do.call(cbind,lapply(myList,`[`,,j)))
})
如果你的意思`lapply(C( a,b),意思是)`,那就不對了。這給了我每個列的平均值,而不是數據幀。 – tkerwin 2010-12-21 19:03:59
ohhhhh ...我沒有意識到你想要他們所有的組合。 – 2010-12-21 19:16:35