R data.table通过名称进行多列转换

时间:2015-07-29 09:07:13

标签: r type-conversion data.table multiple-columns

让DT成为data.table:

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

有没有更好/更简单的方法来进行多列因子转换,如下所示:

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)
)]

列名完全是任意的。

1 个答案:

答案 0 :(得分:4)

是的,效率最高的可能是在set循环中运行for

设置要修改的所需列(您也可以使用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了解详情