5

DT を data.table とします。

DT<-data.table(V1=sample(10),
               V2=sample(10),
               ...
               V9=sample(10),)

次のように複数列の再コード化/サブ割り当てを行うためのより良い/より簡単な方法はありますか:

DT[V1==1 | V1==7,V1:=NA]
DT[V2==1 | V2==7,V2:=NA]
DT[V3==1 | V3==7,V3:=NA]
DT[V4==1 | V4==7,V4:=NA]
DT[V5==1 | V5==7,V5:=NA]
DT[V6==1 | V6==7,V6:=NA]
DT[V7==1 | V7==7,V7:=NA]
DT[V8==1 | V8==7,V8:=NA]
DT[V9==1 | V9==7,V9:=NA]

変数名は完全に任意であり、必ずしも数字を含むとは限りません。多くの列 (Vx:Vx) とすべての 1 つの再コード化パターン (NAME==1 | NAME==7, NAME:=something)。

さらに、複数列の NA を別のものにサブアサインする方法。たとえば、data.frame スタイルの場合:

data[,columns][is.na(data[,columns])] <- a_value
4

1 に答える 1

7

set複数の列の値を置き換えるために使用できます。に基づいて、?setのオーバーヘッド[.data.tableが回避されるので高速です。ループを使用forして列をループし、「i」と「j」でインデックス付けされた値を「NA」に置き換えます

 for(j in seq_along(DT)) {
      set(DT, i=which(DT[[j]] %in% c(1,7)), j=j, value=NA)
  }

編集: @David Arenburg のコメントが含まれています。

データ

set.seed(24)
DT<-data.table(V1=sample(10), V2= sample(10), V3= sample(10))
于 2015-07-30T10:04:02.800 に答える