2017-10-10 66 views
1

我试图转换一个data.table中的某个特定字符串“_cat”分类数据类型。 data.table中的列总数很大(超过700),我不想通过700多列来找出哪些列中的_cat用于更改数据类型。 (它们是随机遍布data.table)通过只匹配列名称中的字符串模式将大量data.table列转换为因子

首先我得到的逻辑数组,指示其列在他们的名字“_cat”:

cat_id <- grepl('_cat', colnames(dt)) 

不知何故,我不得不使用这个CAT_ID逻辑向量转换cat_id中的TRUE对应的列为因子。我不知道如何子句中使用排除列没有图案(那些这CAT_ID项是FALSE)

dt <- dt[, lapply(.SD, as.factor), by = ??? ] 

回答

3

这不是一个GROUP BY操作。用于选择的列,使用.SDcols然后分配(:=)输出回感兴趣

dt[, (cat_id) := lapply(.SD, factor), .SDcols = cat_id ] 

其中

cat_id <- grep('_cat', colnames(dt), value = TRUE)