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

时间:2013-04-25 21:37:06

标签: r data.table

我希望使用向量化操作更改数据表中所选变量的类。我是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]

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

感谢您的时间。

3 个答案:

答案 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的答案正是你要找的。

data <- data[, lapply(.SD, as.character) , .SDcols = index ]
sapply(data , class)
        id      height      weight 
"character" "character" "character"