44

data.tableは素晴らしい R パッケージであり、開発中のライブラリで使用しています。これまでのところ、1 つの合併症を除いて、すべてが順調に進んでいます。変数に保存された名前を使用して列を参照することは、(従来のデータ フレームと比較して) はるかに難しいようdata.tableです (データ フレームの場合は、たとえば: colname="col"; df[df[,colname]<5,colname]=0)。

おそらく、物事を最も複雑にしているのは、 の this の構文に明らかに一貫性がないことですdata.table。場合によっては、eval(colname)and get(colname)、または も機能するc(colname)ようです。他の人でDT[,colname, with=F]は、解決策です。しかし、たとえばset()andsubset()関数などの他のものでは、解決策がまったく見つかりませんでした。最後に、非常に一般的ではありますが、極端なユースケースが以前に議論されました (列名をプログラムで data.table に渡す)。

おそらく私は物事を複雑にしすぎていますか?さまざまな一般的なシナリオで変数を使用して列名を参照するための簡単なチートシートを誰かが書き留めることができればdata.table、非常に感謝しています。

アップデート:

列名をハードコーディングできる場合に機能する特定の例をいくつか示します。

x.short = subset(x, abs(dist)<=100)
set(x, which(x$val<10), "val", 0) 

、と仮定distcol="dist"valcol="val"ます。distcolandvalcolではなくdistandを使用して上記を行う最良の方法は何valですか?

4

4 に答える 4

11

多分あなたはこの解決策についてすでに知っていますか?

DT[[colname]]

これは、OPの例を使用して、以下のコメントの@eddiのソリューションに触発されています:

set.seed(1)
x = data.table(a = 1:10, b=rnorm(10))
colstr="b"
col <- eval(parse(text=paste("quote(",colstr,")",sep="")))
x[eval(col)<0]
x[eval(col)<0,c(colstr):=-100]
于 2013-05-17T20:29:31.020 に答える