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

时间:2014-08-13 23:13:42

标签: r mean na

我对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

所以即使我正在删除这些NAs,它们似乎也不会被删除。我很沮丧。

2 个答案:

答案 0 :(得分:12)

你好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区分大小写
  3. =============================================== ===================================

    > 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 mean(由colMeans计算)没有结果。

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

答案 1 :(得分:2)

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