web-dev-qa-db-ja.com

数値インデックスによってdata.tableの複数の列を選択します

data.tableの数値インデックス(位置)のベクトルを使用して複数の列を選択するにはどうすればよいですか?

これは、data.frameを使用して行う方法です。

df <- data.frame(a = 1, b = 2, c = 3)
df[ , 2:3]
#   b c
# 1 2 3
136
jamborta

data.table>= 1.9.8のバージョンでは、次のすべてが機能します。

library(data.table)
dt <- data.table(a = 1, b = 2, c = 3)

# select single column by index
dt[, 2]
#    b
# 1: 2

# select multiple columns by index
dt[, 2:3]
#    b c
# 1: 2 3

# select single column by name
dt[, "a"]
#    a
# 1: 1

# select multiple columns by name
dt[, c("a", "b")]
#    a b
# 1: 1 2

data.table< 1.9.8(数値列の選択にはwith = FALSEの使用が必要)のバージョンについては、 この前のバージョン を参照してくださいこの答え。 NEWS 、v1.9.8での変更点/変更点の可能性/ポイント2も参照してください。

178
Josh O'Brien

少し冗長ですが、隠された.SD変数を使用することに慣れました。

b<-data.table(a=1,b=2,c=3,d=4)
b[,.SD,.SDcols=c(1:2)]

少し面倒ですが、他のdata.table機能を失うことはありません(私はそうは思いません)ので、結合テーブルなどのような他の重要な関数を使用できるはずです。

40
Tom

namesを使用して列を選択する場合は、.()のエイリアスであるlist()を使用します。

library(data.table)
dt <- data.table(a = 1:2, b = 2:3, c = 3:4)
dt[ , .(b, c)] # select the columns b and c
# Result:
#    b c
# 1: 2 3
# 2: 3 4
36
R Yoda

V1.10.2以降では、..も使用できます。

dt <- data.table(a=1:2, b=2:3, c=3:4)

keep_cols = c("a", "c")

dt[, ..keep_cols]
16
rafa.pereira

@Tom、この解決策を指摘してくれてありがとう。それは私にとって素晴らしいことです。

印刷と上記の例から1つの列を除外する方法を探していました。 2番目の列を除外するには、次のようにします。

library(data.table)
dt <- data.table(a=1:2, b=2:3, c=3:4)
dt[,.SD,.SDcols=-2]
dt[,.SD,.SDcols=c(1,3)]
3