【问题标题】:Replace NAs in a Single Column of a Data Table in R替换 R 中数据表单列中的 NA
【发布时间】:2016-09-24 14:38:42
【问题描述】:

我正在尝试用“-999”替换 R 中数据表的单个列中的 NA,我完全可以做到。

Stackoverflow 上有相关的问题here,但我认为这可以在不遍历表格的情况下完成。

我在数据表中有一个列 column_to_check。该列是一个因子变量,有 80K 个观测值,由 NA、0 和 1 组成。我正在尝试将 NA 更改为 -999,以便可以做进一步的工作。

我正在使用的代码是这样的:

is.na(DT[,column_to_check,with=FALSE]) = "-999"

DT[is.na(column_to_check), column_to_check:="-999"]

第一行将整列设置为 NA。第二个不起作用,我知道已经关闭,但我想我已经接近了。

谁能帮忙?

谢谢。

【问题讨论】:

  • “我正在尝试将 NA 更改为 -999,以便进行进一步的工作。” -- 除非您要导出数据以与其他软件一起使用,否则我想您会后悔的。 R 的所有功能都旨在与 NA 配合使用,而不是与 ersatz 缺失值代码配合使用。
  • 我同意弗兰克关于一般原则的看法。虽然第二行的错误信息是什么?我觉得很好。你有可重现的例子吗?
  • data.table 可能会抱怨第二行,因为您试图将字符值分配给数字列。为什么要使用"-999" 而不是-999
  • 谢谢大家——事实上,该列是一个包含“NA”、“1”和“0”的因子。第二行代码确实有效。不知道为什么我有问题。
  • @Frank - 我这样做是出于纯粹的原因。我需要将 NA 更改为 -999(或 NA 以外的其他值)的原因是 - 之后,我在列上使用 if/then/else 语句来查找值。我使用“if column_to_check == "1" then...:", "if column_to_check == "0" then...:", "else...."。在列中使用 NA 时出现错误,因为 if/then/else 显然不喜欢 NA。所以我需要把它改成字符或数字

标签: r data.table data-munging


【解决方案1】:

除非列中的数据不是字符,否则您的代码不会关闭,在这种情况下,您必须将 -999 设置为不带“”的 inter/numeric

data <- read.table(header=TRUE, text='
 id weight   size
 1     20  small
 2     27  large
 3     24 medium
 ')

data <- data.table(data)

> data[size == 'small', weight := NA]
> data
     size id weight
1:  small  1     NA
2:  large  2     27
3: medium  3     24
> is.na(data)
      size    id weight
[1,] FALSE FALSE   TRUE
[2,] FALSE FALSE  FALSE
[3,] FALSE FALSE  FALSE
> data[is.na(weight), weight := -999]
> data
     size id weight
1:  small  1   -999
2:  large  2     27
3: medium  3     24
> data[size == 'small', weight := NA]
> data[is.na(weight), weight := "-999"]
Warning message:
In `[.data.table`(data, is.na(weight), `:=`(weight, "-999")) :
  Coerced 'character' RHS to 'integer' to match the column's type. 

编辑:这是,我刚刚看到,@dracodoc 在评论中建议的内容

【讨论】:

    猜你喜欢
    • 2021-11-05
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 2021-10-22
    • 2018-08-25
    相关资源
    最近更新 更多