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)
)]
列名完全是任意的。
是的,最有效的可能是 运行 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 了解更多详情
令 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)
)]
列名完全是任意的。
是的,最有效的可能是 运行 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 了解更多详情