重新分类数据表中的选择列

And*_*eas 6 r data.table

我希望使用向量化操作更改数据表中所选变量的类.我是data.table语法的新手,我正在努力学习.我现在的问题是基本的,但它会帮助我更好地理解数据表的思维方式!

这里一个类似的问题!但是,该解决方案似乎与重新分类一列或所有列有关.我的问题对于少数几列来说是独一无二的.

### Load package
require(data.table)

### Create pseudo data
data <- data.table(id     = 1:10,
                   height = rnorm(10, mean = 182, sd = 20),
                   weight = rnorm(10, mean = 160, sd = 10),
                   color  = rep(c('blue', 'gold'), times = 5))

### Reclass all columns
data <- data[, lapply(.SD, as.character)]

### Search for columns to be reclassed
index <- grep('(id)|(height)|(weight)', names(data))

### data frame method
df <- data.frame(data)
df[, index] <- lapply(df[, index], as.numeric)

### Failed attempt to reclass columns used the data.table method
data <- data[, lapply(index, as.character), with = F]
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.我的数据很大,因此使用正则表达式来创建列号的向量以重新分类是必要的.

感谢您的时间.

mne*_*nel 9

你可以通过使用避免.SD内部构造的开销jset

for(j in index) set(data, j =j ,value = as.character(data[[j]]))
Run Code Online (Sandbox Code Playgroud)

  • (+1)这对2个帐户是快速/有效的:1)没有.SD和2)使用`set`而不是`:=`(后者具有`[.data.table`开销).辉煌! (2认同)

dic*_*koa 8

我认为@ SimonO101做了大部分工作

data[, names(data)[index] := lapply(.SD, as.character) , .SDcols = index ]
Run Code Online (Sandbox Code Playgroud)

你可以使用:=魔法

  • (+1)你也可以直接传递`index`.`data [,c(index):= lapply(.SD,as.character),. SDcols = index]` (2认同)