web-dev-qa-db-fra.com

Transmettez le nom de la colonne dans data.table en utilisant une variable

Duplicate possible:
Sélection/attribution variable de champs dans un fichier data.table

Dans l'exemple suivant, je crée une table de données dont le nom de colonne est "x" et "v".

library('data.table')
DT <- data.table(x = c("b","b","b","a","a"), v = rnorm(5))

Je peux accéder aux valeurs de la colonne 'x' par:

DT[ , x]
# [1] "b" "b" "b" "a" "a"

Mais si je veux accéder en passant par une variable, cela ne fonctionne pas

temp <- "x"
DT[ , temp]
# [1] "x"

Il y aurait plusieurs colonnes et je devrais sélectionner des valeurs pour seulement deux d'entre elles. Ces noms de colonne seront fournis en passant par un module R.

Qu'à cela ne tienne, j'ai compris, cela devrait être:

DT[ , get(temp)]
81
user1631306

Utilisez les fonctions quote() et eval() pour transmettre une variable à j. Vous n'avez pas besoin de guillemets doubles sur les noms de colonne lorsque vous procédez ainsi, car la chaîne quote()- ed sera évaluée à l'intérieur du DT[]

temp <- quote(x)
DT[ , eval(temp)]
# [1] "b" "b" "b" "a" "a"

Avec un seul nom de colonne, le résultat est un vecteur. Si vous voulez un résultat data.table, ou plusieurs colonnes, utilisez list form

temp <- quote(list(x, v))
DT[ , eval(temp)]
#   x           v
# 1: b  1.52566586
# 2: b  0.66057253
# 3: b -1.29654641
# 4: a -1.71998260
# 5: a  0.03159933
50
Douglas Clark