【问题标题】:mean( ,na.rm=TRUE) still returns NAmean( ,na.rm=TRUE) 仍然返回 NA
【发布时间】:2014-10-07 11:51:43
【问题描述】:

我对 R 非常陌生(从 SPSS 转移过来)。我在运行 Mavericks 的 Mac 上使用 RStudio。请用 2 个音节的话回答我的问题,因为这是我第一次真正尝试这样的事情。我已经完成了一些基本教程,并且可以对所有示例数据进行处理。

我有一个包含 64,000 行和大约 20 列的数据集。我想获得变量“hold_time”的平均值,但无论我尝试什么,我都会得到 NA 或 NA 以及一条警告消息

我已经尝试了以下所有方法:

> summary(data_Apr_Jun$hold_time,na.rm=TRUE)
      5       6       7       4       8       2       1       3      10 
   9596    9191    3192    1346    1145     977     940     655     534 
     11       9      12       0      13      15      14      16      17 
    490     444     249     128     106      86      73      68      40 
     98     118     121     128     125      97     101     188      86 
     31      29      28      28      27      27      26      26      26 
    102     105     113      81     119     139     127     134     152 
     25      25      25      25      24      24      23      23      23 
     18      69      96     106     110     111     120     190      76 
     23      23      23      22      22      22      22      22      22 
     82     132     135     156     166      94     115     116     117 
     22      21      21      21      21      21      20      20      20 
    142     153     165      19      93     100     104     112     126 
     20      20      20      20      20      19      19      19      19 
    131     138     143     157     177     189      61      87     103 
     19      19      19      19      19      19      19      19      18 
    108     148     176     212      54      56      64      74      79 
     18      18      18      18      18      18      18      18      18 
     99     107     129     163     168     171     178     226     236 
     18      17      17      17      17      17      17      17      17 
     59      71      78      95     114     122     123     130 (Other) 
     17      17      17      17      16      16      16      16    2739 
   NA's 
  29807 
> mean(as.numeric(data_Apr_Jun$hold_time,NA.rm=TRUE))
[1] NA
> data_Apr_Jun$hold_time[data_Apr_Jun$hold_time=="NA"]<-0
> mean(as.numeric(data_Apr_Jun$hold_time))
[1] NA
> mean(data_Apr_Jun$hold_time)
[1] NA
Warning message:
In mean.default(data_Apr_Jun$hold_time) :
  argument is not numeric or logical: returning NA
> mean(as.numeric(data_Apr_Jun$hold_time,na.rm=TRUE))
[1] NA
> colMeans(data_Apr_Jun$hold_time)
Error in colMeans(data_Apr_Jun$hold_time) : 
  'x' must be an array of at least two dimensions
> colMeans(data_Apr_Jun)
Error in colMeans(data_Apr_Jun) : 'x' must be numeric
> mean(data_Apr_Jun$hold_time,na.omit)
[1] NA
Warning message:
In mean.default(data_Apr_Jun$hold_time, na.omit) :
  argument is not numeric or logical: returning NA

因此,即使我删除了 NA,它们似乎也没有被删除。我很困惑。

【问题讨论】:

  • mean 有一个参数 na.rm。它没有参数 NA.rm。 R 区分大小写。
  • 也许您应该在强制转换为数字或任何其他形式之前查看数据的结构。 str(data_Apr_Jun$hold_time) 的输出会有所帮助。顺便说一句,在第一次通话中应该是 na.rm 而不是 NA.rm。
  • 尝试修复问题标题并更清楚您要达到的目标
  • parameter、argument、sensitive、coercing 都有 > 2 个音节,alex brown 和 won782

标签: r mean na


【解决方案1】:

你好 Rnovice 很遗憾有几个错误...让我们一一解决:

> mean(as.numeric(data_Apr_Jun$hold_time,NA.rm=TRUE))
[1] NA

这是因为您以错误的方式使用na.rm: 应该是

mean(as.numeric(data_Apr_Jun$hold_time),na.rm=TRUE)
  1. na.rm 是 mean 的参数,而不是 as.numeric 的参数(注意括号)
  2. 是na.rm R 区分大小写

================================================ ====================================

> data_Apr_Jun$hold_time[data_Apr_Jun$hold_time=="NA"]<-0

R 不允许与 NA 进行比较,正如我在这里指出的那样: Something weird about returning NAs
你的意思是

data_Apr_Jun$hold_time[which(is.na(data_Apr_Jun$hold_time))] <- 0

还有一个注释=="NA" 与字符串"NA" 进行比较。试试is.na("NA") 和is.na(NA) 看看有什么不同。

================================================ ====================================

colMeans(data_Apr_Jun$hold_time)
Error in colMeans(data_Apr_Jun$hold_time) : 
  'x' must be an array of at least two dimensions

试试data_Apr_Jun$hold_time,你会看到,它返回一个向量。这就是为什么 colwise 均值(由 colMeans 计算)没有意义的原因。

希望通过这些提示可以理解/解决其余部分。 您已经意识到一件非常重要的事情:
使用 R!您走在正确的轨道上!

【讨论】:

【解决方案2】:

不幸的是,as.numeric 进行了隐式强制,这会导致错误的答案。不要暗示它的因素。

【讨论】:

  • 这是一个好点;另一个答案没有提到变量 hold_time 似乎是一个因素,并且在一个因素上使用 as.numeric 不会给出预期的结果。
猜你喜欢
  • 2019-01-01
  • 1970-01-01
  • 2013-03-27
  • 2018-02-27
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多