r - 处理摘要统计中的NA值

时间:2014-12-08 23:40:35

标签: r

场合

我目前正在使用ddplynumcolwise(summary)来返回5个摘要统计信息(即minQ1Q2mean,对于给定的数据框,Q3max)。

但是,我无法弄清楚如何处理NA s(尝试了rm.na=TRUE的各种组合。

以下是一个示例数据框,以及我如何使用ddplynumcolwise(summary)

library(dplyr)
id <- c(1, 2, 3, 4, 5)
name <- c("name1", "name2", "name3", "name4", "name5")
position <- c("AAA", "BBB", "CCC", "AAA", "BBB")
salary <- c(20, 30, 40, 50, 60)
bonus <- c(1, 1, 1, NA, 1)
sti <- c(2, 3, 4, 5, 6)
lti <- c(6, 5, 4, 3, 2)
other <- c(10, 11, 12, 13, 14)

df <- data.frame(id, name, position, salary, bonus, sti, lti, other)

df_out <- ddply(df, .(position), numcolwise(summary))

问题

是否可以使用numcolwise(summary)这种方式处理NA,或者是否有方法/函数可以为每个数字列提供5个统计数据?

备注

这些功能都可以使用

min(df[,"bonus"], na.rm=TRUE)
median(df[,"bonus"], na.rm=TRUE)
mean(df[,"bonus"], na.rm=TRUE)
quantile(df[,"bonus"], probs=(c(0.25, 0.5, 0.75)), type=7, na.rm=TRUE)
summary(df[,"bonus"], na.rm=TRUE)

更新

经过一些研究,一个可能但不是很优雅的解决方案是

df[,c("position", "salary","bonus","sti","lti","other")] %>% 
  group_by(position) %>% 
  summarise_each(funs(min, quantile(.,0.25, na.rm=TRUE), 
                      quantile(.,0.5, na.rm=TRUE), mean, quantile(., 0.75, na.rm=TRUE), max))

1 个答案:

答案 0 :(得分:0)

我可以使用%>%表示法summarise_each()并在funs参数中指定函数来实现结果。

df[,c("position", "salary","bonus","sti","lti","other")] %>% 
  group_by(position) %>% 
  summarise_each(funs(min, quantile(.,0.25, na.rm=TRUE), 
                  quantile(.,0.5, na.rm=TRUE), mean, quantile(., 0.75, na.rm=TRUE), max))