我希望使用向量化操作更改数据表中所选变量的类。我是data.table语法的新手,我正在努力学习。我现在的问题是基本的,但它会帮助我更好地理解数据表的思维方式!
提出了类似的问题here!但是,该解决方案似乎与重新分类一列或所有列有关。我的问题对于少数几列来说是独一无二的。
### 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]
任何帮助将不胜感激。我的数据很大,所以使用正则表达式创建一个列号的向量来重新分类是必要的。
感谢您的时间。
答案 0 :(得分:9)
使用.SD
j
内构建set
的开销
for(j in index) set(data, j =j ,value = as.character(data[[j]]))
答案 1 :(得分:8)
我认为@ SimonO101做了大部分工作
data[, names(data)[index] := lapply(.SD, as.character) , .SDcols = index ]
您可以使用:=
魔法
答案 2 :(得分:4)
你只需要在你的索引向量中使用.SDcols
(我今天就学会了!),但只是返回带有重新列的数据表。 @dickoa的答案正是你要找的。 p>
data <- data[, lapply(.SD, as.character) , .SDcols = index ]
sapply(data , class)
id height weight
"character" "character" "character"