替换R中数据表的单列中的NA

时间:2016-09-24 14:38:42

标签: r data.table data-munging

我试图用" -999"替换R中数据表的单个列中的NAs。我完全明白了。

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。第二个不起作用,我知道已关闭,但我认为我已经关闭了。

有人可以帮忙吗?

感谢。

1 个答案:

答案 0 :(得分:2)

除非列中的数据不是字符,否则您的代码不会关闭,在这种情况下,您必须将-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在评论中建议的内容