【发布时间】:2015-11-23 22:03:10
【问题描述】:
我想对 data.frame 中的变量进行数字汇总(基础包中的summary.default())并在 broom 包中使用 tidy(),但这不知何故失败了。
在这个例子中,我创建了一个data.frame:
df <- data.frame(group = c(rep('M', 6), 'F', 'F', 'M', 'M', 'F', 'F'),
val = c(6, 5, NA, NA, 6, 13, NA, 8, 10, 7, 14, 6))
我加载 plyr (1.8.3)、dplyr (0.4.2) 和 broom (0.3.7)(按此顺序)。仅供参考在 64 位 Windows 上运行 R 3.2.2,但我在 Unix 上遇到与 3.2.1 类似的问题。
我认为这会给我一个理想的输出:
df %>% group_by(group) %>% do(tidy(summary(.$val)))
但我收到一条错误消息:
Error: corrupt data frame at index 1
我可以使用plyr 方法和broom::tidy 获得理想的结果,如下所示:
df %>% group_by(group) %>% do(summ = summary(.$val)) %>%
daply(.(group), function(x) tidy(x$summ[[1]]))
group minimum q1 median mean q3 maximum <NA>
F 6 7 8 9.333 11 14 1
M 5 6 6.5 7.833 9.25 13 2
但显然我问这个问题是为了解决问题的根源,如上所述在 do() 函数中使用 tidy() (summaryDefault)。
【问题讨论】:
-
NAs indf正在制造问题。如果在用整数替换NAs 后运行相同的代码,代码运行良好。 -
试试
df[complete.cases(df),] %>% group_by(group) %>% do(tidy(summary(.$val))) -
summaryDefault tidy 为 NA 生成了一个额外的列,所以这仍然是一个问题,但感谢 @Narendra 缩小范围