2016-09-24 11 views
-1

Rのデータテーブルの単一列のNAsを "-999"に置き換えようとしています。Rのデータテーブルの単一列にNAsを置き換えます

Stackoverflowに関連するhereがありますが、これはテーブルを反復せずに行うことができると思います。

私はデータテーブルにcolumn_to_checkの列を持っています。列は因子変数であり、NA、0、および1からなる80Kの観測値を持っています。NA-999に変更しようとしています。

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

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

最初の行はNAに列全体を設定します。

私が働いているコードは、このです。 2番目は動作しません。私は知っていますが、私は近くにいると思います。

誰でも手助けできますか?

ありがとうございました。

+0

"私はNAを-999に変更しようとしているので、私はさらなる仕事をすることができます。 - あなたが他のソフトウェアで使用するためにデータをエクスポートしない限り、私はあなたがこれを後悔すると思います。 Rのすべての機能は、NAでうまくいくように設計されており、ersatzに値のコードがありません。 – Frank

+0

私はFrankに一般原則について同意します。 2行目のエラーメッセージは何ですか?それは私にはうまく見えます。再現可能な例がありますか? – dracodoc

+0

数値の列に文字値を割り当てようとしているため、 'data.table'は2行目について不平を言うことがあります。なぜ '-999'の代わりに' '-999''を使うのですか? – dracodoc

答えて

2

列のデータは、あなたが

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. 

EDIT「」なしで数値/インターとして-999を設定する必要があります。その場合には文字ではありませんしない限り、あなたのコードはオフではありません:これは、Iであります私がコメントしたところで@dracodocが示唆したこと

関連する問題