R data.table 多列 recode/sub-assign
R data.table multi column recode/sub-assign
设 DT 为 data.table:
DT<-data.table(V1=sample(10),
V2=sample(10),
...
V9=sample(10),)
有没有 better/simpler 方法来做多列 recode/sub-assign 像这样:
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) 和所有列的一个重新编码模式 (NAME==1 | NAME==7, NAME:=something).
此外,如何将 NA 的多列子分配给其他内容。例如 data.frame 样式:
data[,columns][is.na(data[,columns])] <- a_value
您可以使用 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))
设 DT 为 data.table:
DT<-data.table(V1=sample(10),
V2=sample(10),
...
V9=sample(10),)
有没有 better/simpler 方法来做多列 recode/sub-assign 像这样:
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) 和所有列的一个重新编码模式 (NAME==1 | NAME==7, NAME:=something).
此外,如何将 NA 的多列子分配给其他内容。例如 data.frame 样式:
data[,columns][is.na(data[,columns])] <- a_value
您可以使用 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))