我有一个data.table,我希望在某些列上执行相同的操作.这些列的名称以字符向量给出.在这个特定的例子中,我想将所有这些列乘以-1.
一些玩具数据和指定相关列的向量:
library(data.table)
dt <- data.table(a = 1:3, b = 1:3, d = 1:3)
cols <- c("a", "b")
Run Code Online (Sandbox Code Playgroud)
现在我这样做,循环遍历字符向量:
for (col in 1:length(cols)) {
dt[ , eval(parse(text = paste0(cols[col], ":=-1*", cols[col])))]
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有for循环的情况下直接执行此操作?
设DT为data.table:
DT<-data.table(V1=sample(10),
V2=sample(10),
...
V9=sample(10),)
Run Code Online (Sandbox Code Playgroud)
是否有更好/更简单的方法来执行多列重新编码/子分配,如下所示:
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]
Run Code Online (Sandbox Code Playgroud)
变量名称完全是任意的,不一定有数字.许多列(Vx:Vx)和一个重新编码模式(NAME == 1 | NAME == 7,NAME:= something).
而且,如何多列将NA分配给其他东西.例如data.frame风格:
data[,columns][is.na(data[,columns])] <- a_value
Run Code Online (Sandbox Code Playgroud)