查找r中数据框架的平均值和中位数

时间:2010-12-21 18:32:36

标签: r functional-programming

我有几个数据框a b c d,每个都有相同的列名。我想找到这些数据帧的均值和中位数。换句话说,构建与meanmedian等大小相同的新ab数据框。

我可以使用几个for循环,但我敢打赌,使用R内置函数可以更快地完成此操作。

3 个答案:

答案 0 :(得分:9)

按照Josh Ulrich的回答,怎么样

library(abind)
apply(abind(a,b,c,d,along=3),c(1,2),median)

? (在相应切片上使用rowMeans仍然会比apply mean更快......我认为rowMedians(Bioconductor)中有Biobase如果你真的需要速度包?)

答案 1 :(得分:2)

我不确定JD的答案会为您提供您想要的内容,因为生成的对象与ab等的尺寸不同。

将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)))
})

答案 2 :(得分:1)

您可以将数据帧串入数据框列表,然后使用lapply(myList, mean, ...)