适用于每列的函数输出的更好输出

时间:2014-09-01 23:36:03

标签: r apply dplyr

我正在尝试找出有关data.frame的一些摘要统计信息:

avg.nas <- apply(my.data, 2, function(x) mean(is.na(x)))

这给出了预期的结果:一个带有每列值的命名数值向量。问题是这个值很难管道进入其他操作(例如将它连接到每个变量的描述)。我知道我可以摆弄sapplyrownamestas.data.frame和突变的组合来获得我想要的东西,但是有更多的惯用方法可以获得这种来自数据框的汇总统计数据?

要清楚,我想要的是

avg.nas <- as.data.frame(avg.nas)
names(avg.nas) <- "prop.missing"
avg.nas$Variable <- rownames(avg.na)

3 个答案:

答案 0 :(得分:2)

我仍然不完全清楚你在寻找什么,但也许这是另一种选择:

library(reshape2)
x <- data.frame(x = 1:5,y = 6:10)
x[c(1,3),1] <- NA
> setNames(melt(lapply(x,function(x) mean(is.na(x)))),c('Mean','Variable'))
  Mean Variable
1  0.4        x
2  0.0        y

答案 1 :(得分:0)

您可以在不rowMeans的{​​{1}}值上使用NA。从您的问题来看,您似乎可能想要添加一个新行,其中每行的比例为NA。

apply

答案 2 :(得分:0)

永远不要在apply上使用data.frame。这会将它强制转换为矩阵,并且不会提高内存效率(更不用说对一致类型的更改了)

lapply将遍历列并返回列表。

  as.data.frame(lapply(m, function(x) mean(is.na(x))))