mean( ,na.rm=TRUE)仍会返回NA。

9
我对R很陌生(从SPSS转过来)。我正在使用运行Mavericks的Mac上的RStudio。请尽可能简单易懂地回答我的问题,因为这是我第一次尝试这样的事情。我已经完成了一些基本的教程,并且可以在所有示例数据上运行代码。
我有一个包含大约20列和64,000行的数据集。我想获得变量“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

尽管我正在删除NAs,但它们似乎没有被删除。我很困惑。


1
mean函数有一个参数na.rm。它没有NA.rm参数。R区分大小写。 - Alex Brown
也许在强制转换为数字或其他形式之前,您应该查看数据的结构。str(data_Apr_Jun $ hold_time)的输出将有所帮助。顺便说一句,在第一个调用中应该是na.rm而不是NA.rm。 - won782
尝试修复问题标题并更清楚地表达您要实现的目标。 - Lior Elrom
参数,参数,敏感,和强制都有超过2个音节,Alex Brown和won782。 - rawr
2个回答

18

你好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.rmmean的一个参数,而不是as.numeric的参数(小心括号)。
  2. na.rm在R中是大小写敏感的。

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

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

R不允许与NA进行比较,正如我在这里指出的: 有关返回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,你会发现它返回一个向量。这就是为什么列均值(由 colMeans 计算)没有意义的原因。

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


4
如果 data_Apr_Jun$hold_time 是一个因子变量,仅使用 as.numeric 进行转换可能会导致错误的结果。 - user20650
正如用户20650所指出的,可以看一下这个链接: https://dev59.com/U3A75IYBdhLWcg3wOGLS - Rentrop

3

很遗憾,as.numeric 进行了一种隐式强制转换,导致了错误的答案。不要在因子上使用它。


1
这是一个很好的观点;另一个答案没有提到变量hold_time似乎是一个因素,使用as.numeric在因素上不会得到预期的结果。 - Hong Ooi

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