web-dev-qa-db-ja.com

data.tableから文字列で列を取得する

rawdata.tableと次のコードは機能します。

raw[,r_responseTime] #Returns the whole column
raw[,c_filesetSize]  #Same as above, returns column
plot(raw[,r_responseTime]~raw[,c_filesetSize]) #draws something

今、私はこれらの列を文字列から指定したいので、例えば:

col1="r_reponseTime"
col2="c_filesetSize"

文字列で列を参照しながら、上記と同じようにするにはどうすればよいですか?

raw[,col1] #Returns the whole column
raw[,col2]  #Same as above, returns column
plot(raw[,col1]~raw[,col2]) #draws something

もちろん、何らかの "逆参照"が必要なので、機能しません。ヘルプとインターネットで何を検索すればよいかわからなかったので、馬鹿げた質問でごめんなさい。

26
theomega

再現可能な例を提供したり、少なくともrawの列名とr_responseTimeおよびc_filesetSize含む。つまり、getは逆参照するための関数なので、これらを試してみてください。

raw[, get(col1)]
raw[, get(col2)]
plot(raw[, get(col1)] ~ raw[, get(col2)])
32
flodel

代わりの方法は、match()関数または%in%演算子を使用することです。

raw[, match(col1, names(raw)),with=FALSE]

文字列のベクトルがある場合は、mgetを使用できます

cols = c("r_reponseTime", "c_filesetSize")
raw[, mget(cols)]
6
tadejsv

残念ながら、「取得」は問題になる可能性があります。以下の例をご覧ください。

m = 100
x1 = sample(c("cat", "dog", "horse"), m, replace=TRUE)
y1 = rnorm(m)
fill1 = sample(c("me", "myself", "dude"), m, replace=TRUE)
df = data.frame("x"=x1, "y"=y1, "fill"=fill1)
dt = data.table(df)

getが機能しません!

y = "y"
dt[ , get(y)]

作品を入手!

yCol = "y"
dt[ , get(yCol)]

常に動作しますが、きれいではありません!

eval(parse(text = paste0("values = dt[ ,",  y, "]")))
eval(parse(text = paste0("values = dt[ ,",  yCol, "]")))
0
rz1317