6

ベクトル化された操作を使用して、データ テーブルで選択した変数のクラスを変更したいと考えています。私は data.table 構文が初めてで、できるだけ多くのことを学ぼうとしています。質問は基本的なものですが、データテーブルの考え方をよりよく理解するのに役立ちます!

同様の質問がここで尋ねられました!ただし、解決策は、1 つの列またはすべての列を再分類することに関連しているようです。私の質問は、選択したいくつかの列に固有のものです。

### 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]

どんな助けでも大歓迎です。データが大きいため、正規表現を使用して列番号のベクトルを作成し、再分類する必要があります。

お時間をいただきありがとうございます。

4

3 に答える 3

9

を使用することで、.SD内部の構築のオーバーヘッドを回避できますjset

for(j in index) set(data, j =j ,value = as.character(data[[j]]))
于 2013-04-25T22:39:53.790 に答える
8

@SimonO101が仕事のほとんどをやったと思う

data[, names(data)[index] := lapply(.SD, as.character) , .SDcols = index ]

:=魔法が使えるだけ

于 2013-04-25T21:52:25.413 に答える
4

.SDcolsインデックス ベクトルを使用するだけで済みますが (今日それを学びました)、再分類された列を含むデータ テーブルが返されるだけです。@dickoa の答えは、あなたが探しているものです。

data <- data[, lapply(.SD, as.character) , .SDcols = index ]
sapply(data , class)
        id      height      weight 
"character" "character" "character" 
于 2013-04-25T21:44:33.020 に答える