18

data.tableいくつかの不等式基準に基づいてフィルタリングしたいことがあります:

dt <- data.table(A=letters[1:3], B=2:4)
dt
#    A B
# 1: a 2
# 2: b 3
# 3: c 4

dt[B>2]
#    A B
# 1: b 3
# 2: c 4

上記は、ベクタースキャンソリューションとしてうまく機能します。しかし、これを列の変数名と組み合わせる方法がわかりません。

mycol <- "B"
dt[mycol > 2]
#    A B      // Nothing has changed
# 1: a 2
# 2: b 3
# 3: c 4

これを回避するにはどうすればよいですか? を使用してキーを設定することでバイナリ検索を使用できることはわかってsetkeyv(dt, mycol)いますが、不等式の基準に基づいてバイナリ検索を行う方法がわかりません。

4

3 に答える 3

5

これにはアクセサー関数が用意されています。指定しない限り、つまり yourのjフレームで評価されます。これは、これを行う標準的な方法です。Xdata.tablewith = FALSE

dt[ , mycol , with = FALSE ]
   B
1: 2
2: 3
3: 4

列、論理比較、サブセット行を返す...

dt[ c( dt[ , mycol , with = FALSE ] > 2 ) ]
于 2013-12-13T17:10:05.283 に答える
5

もう 1 つの方法は、]]B をベクトルとして取得し、これを使用してサブセット化することです。

dt[dt[[mycol]] > 2]
于 2013-12-13T17:41:30.207 に答える