让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)
)]
列名完全是任意的。
答案 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了解详情