除了na.rm=TRUE之外,mean返回NaN

7

示例数据

date        coins   
2013-10-01  NA      
2013-10-01  NA      
2013-10-01  NA      
2013-11-01  10      
2013-11-01  NA      
2013-11-01  20      
2013-11-01  30      
2013-11-01  40      
2013-12-30  NA      
2013-12-30  22      
2013-12-30  24
2013-12-30  25

我想做什么?

我想计算硬币一列的平均值和中位数,忽略缺失值。

我到目前为止做了什么?

  1. 按日期变量对数据进行分组 by_date <- group_by(df, date)
  2. 使用以下方法对数据进行汇总:by_date %>% summarise_each_(funs(mean(., na.rm = TRUE), median(., na.rm=TRUE)), names(by_date)[2])

问题 summarise_each_返回的结果在日期2013-10-01处显示NaN。这是否意味着该函数没有忽略缺失值?


4
这句话的意思是,你正在使用 mean(NA, na.rm = TRUE) 这个函数,如果一个组里面所有的值都是 NA,那么可以设置一个检查,将 na.rm 参数设为 FALSE。请注意,我已经尽力使翻译通俗易懂,但没有改变原文的含义。 - rawr
2
顺便提一下,你可以使用... summarise_each(funs(...), 2)而不是... summarise_each_(funs(...), names(by_date)[2]) - talat
@docendodiscimus 感谢您的建议,但是当我按照您的建议更改参数时,R会响应错误 Error in UseMethod("as.lazy_dots") : no applicable method for 'as.lazy_dots' applied to an object of class "c('double', 'numeric')" - Imran Ali
@ImranAli,你需要使用summarise_each而不是summarise_each_来实现我的建议。 - talat
1个回答

7
这里的问题在于2013-10-01的所有数值都是NA,因此无法计算平均值。 NaN是R试图告诉您这一点。
如果您不想让2013-10-01出现在摘要中,一种选择是事先处理掉NA值,就像这样:
by_date<-group_by(df[!is.na(df$coins),],date)

1
读者请注意:R: Why does mean(NA, na.rm = TRUE) return NaN - Zheyuan Li

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接