【问题标题】:Getting error in R trying to calculate mean on column that contains NA [closed]在 R 中尝试计算包含 NA 的列的平均值时出现错误 [关闭]
【发布时间】:2016-09-27 12:58:31
【问题描述】:

从网上和这个组中搜索,似乎这应该可行:

> mean(r_lab$ozone, na.rm=TRUE)

但是,我得到的是:

[1] NA
Warning message:
In mean.default(r_lab$ozone, na.rm = TRUE) :
  argument is not numeric or logical: returning NA

这是数据集中该列的内容:

> r_lab$Ozone
 [1]  41  36  12  18  NA  28  23  19   8  NA   7  16  11  14
[15]  18  14  34   6  30  11   1  11   4  32  NA  NA  NA  23

我有点慌张。

【问题讨论】:

  • class(r_lab$ozone) 的结果是什么?
  • 请添加reproducible example 供人们使用。当我将您的值分配给一个向量并运行您的代码时,我得到一个平均且没有错误。
  • 它可能是一个因子列。转换为数字,它会工作。即mean(as.numeric(as.character(r_lab$ozone)), na.rm=TRUE)
  • @ZheyuanLi 是的,确实如此,但警告信息通常与mean(factor(1:5)) [1] NA Warning message: In mean.default(factor(1:5)) : argument is not numeric or logical: returning NA等因素一起出现
  • 等等,你在第一个写了ozone,在最后一个写了Ozone。您是否有两列同名但大写不同?

标签: r mean na.rm


【解决方案1】:

您的数据很可能属于 character 类,而不是数字。

看看这些例子:

# Set up some numeric data
x <- c(41, 36, 12, 18, NA, 28, 23, 19,  8, NA,  7, 16, 11, 14, 18, 14, 34,  6, 30, 11,  1, 11,  4, 32, NA, NA, NA, 23)

# Clearly taking the mean on this will work
 mean(x, na.rm = TRUE)

[1] 18.13043

但是,如果您的数据属于 character 类,则会收到您报告的错误消息:

y <- as.character(x)
mean(y, na.rm = TRUE)

[1] NA
Warning message:
In mean.default(y, na.rm = TRUE) :
  argument is not numeric or logical: returning NA

所以你应该先把你的数据转换成数字,然后取平均值:

mean(as.numeric(x), na.rm = TRUE)

[1] 18.13043

【讨论】:

  • 唯一的问题是as.character(x) 在每个条目周围都带有双引号。这不是 OP 发布的内容。
  • @RHertel 谁知道 OP 发布了什么 - 没有可重复的示例,所以这都是猜测工作,不是吗。在他最后一次更新之后,他似乎只是犯了一个拼写错误。尽管如此,这个答案很可能是真正发生的事情。
【解决方案2】:

我不知道 R 区分大小写。

Richard 是对的,我应该使用臭氧,而不是臭氧。感谢大家的帮助。

抱歉,我不知道如何提供可重现的数据。在这种情况下,什么才是足够的?

【讨论】:

  • 复制并粘贴来自dput() 函数的结果。那是可重现的代码。
  • 看看我的回答,我让你的例子可以重现。
  • 您可以在我最初提供的link 中了解如何提供可重现的示例。这就是我提供它的原因。
猜你喜欢
  • 2021-12-08
  • 2021-12-27
  • 2021-03-04
  • 2021-03-15
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
相关资源
最近更新 更多