我试图用" -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。第二个不起作用,我知道已关闭,但我认为我已经关闭了。
有人可以帮忙吗?
感谢。
答案 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在评论中建议的内容