【问题标题】:Factors to Numeric in RR中数值的因素
【发布时间】:2020-05-10 23:56:33
【问题描述】:

我一直关注这篇帖子 here,以了解如何在 R Studio 中将我的因子更改为数值。有问题的因素确实有我自己放在那里的NA。我需要稍后在tapply() 代码中使用这个因素,并希望确保 NA 不会成为问题。

示例代码:

factor.1[2] <-NA
factor.1[7] <-NA
factor.1[12] <-NA

然后,按照链接帖子上的说明进行操作:

num.fact1 <- as.numeric(levels(factor.1))[factor.1]

我得到的“错误”是“强制引入的 NA”。但无论如何,它确实让我继续。现在,点击:

tapply(
    num.fact1,
    factor.2,
    mean, na.rm=TRUE
)

我认为输出看起来不错/准确。我想确保我遇到的“强制引入的 NA”错误不会成为问题,尤其是当我将此笔记本编织成 PDF 时。

【问题讨论】:

  • 我只是为示例编了一个随机的 factor.1 名称。实际因素是大约 2000 行的列表(所有数字数据,现在有 3 个 NA)。您需要查看确切的数据吗?
  • 这不是错误,只是警告。
  • 好的,这应该不是问题吗?我的流程看起来正确吗?
  • 不要忽略警告。这意味着您的factor.1 包含一些非数字内容,例如“1”。或“2.O”。您可能需要先进行一些数据清理。

标签: r na tapply


【解决方案1】:

在这种情况下,将 NA 分配给变量是无害的。然而,警告的原因更令人担忧。看这个例子:

factor.1 <- factor(c("5.6", "4.7", "10.1", "2.O", "3.6", "1.7"))
factor.1
# [1] 5.6  4.7  10.1 2.O  3.6  1.7 
# Levels: 1.7 10.1 2.O 3.6 4.7 5.6

它们看起来都像数字,对吧?现在转换为数字:

num.fact.1 <- as.numeric(levels(factor.1))[factor.1]
# Warning message:
# NAs introduced by coercion

该消息警告您某些数据无法转换为数字,因此结果为 NA。让我们检查一下:

data.frame(factor.1, num.fact.1)[which(is.na(num.fact.1) & !is.na(factor.1)), ]
#   factor.1 num.fact.1
# 5      2.O         NA

第 5 个数据是“2.O”而不是 2.0。数据可能需要一些清理。

【讨论】:

  • 这很有意义!感谢@Edward 的明确示例。就数据清洗而言,我正在使用的数据集确实有一些需要解决的清洗工作,即我更改为 NA 的三点。我想有一次,我改变了这三个,其余的数据应该没问题,根据作业。
  • @frazaga962 不过要小心。将这三行替换为 NA 后,您仍然会收到警告。这意味着有更多行包含非数字数据。运行我的最后一个命令来找到它们。
  • 我得到了 0 行的回报。我还会收到警告吗?
  • 我猜不会。但是你呢?如果您仍然收到警告,我一定是遗漏了一些东西。但是如果不查看您的一些数据就很难知道。如果您编辑您的问题并添加factor.1 的输出,那么我可以检查一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 2023-03-21
  • 2016-12-21
  • 1970-01-01
  • 2017-07-04
相关资源
最近更新 更多