R data.table 多列名称覆盖

R data.table multi column coversion by names

令 DT 为 data.table:

DT<-data.table(V1=factor(1:10),
           V2=factor(1:10),
           ...
           V9=factor(1:10),)

有没有better/simpler方法可以像这样进行多列因子转换:

DT[,`:=`(
  Vn1=as.numeric(V1),
  Vn2=as.numeric(V2),
  Vn3=as.numeric(V3),
  Vn4=as.numeric(V4),
  Vn5=as.numeric(V5),
  Vn6=as.numeric(V6),
  Vn7=as.numeric(V7),
  Vn8=as.numeric(V8),
  Vn9=as.numeric(V9)
)]

列名完全是任意的。

是的,最有效的可能是 运行 setfor 循环中

设置要修改的列(您也可以使用 names(DT) 选择所有名称)

cols <- c("V1", "V2", "V3") 

然后 运行 循环

for (j in cols) set(DT, i = NULL, j = j, value = as.numeric(DT[[j]]))

或者效率稍低但可读性更高的方法(注意评估变量的 cols 周围的括号)

## if you chose all the names in DT, you don't need to specify the `.SDcols` parameter
DT[, (cols) := lapply(.SD, as.numeric), .SDcols = cols] 

即使对于大数据集,两者都应该是高效的。您可以阅读更多关于 data.table 基础知识 here


尽管注意 以这种方式将 factor 转换为 numeric 类,请参阅 here 了解更多详情