数百列を含む data.frame から 1 列を削除する必要があります。
を使用して、これを便利に行うためにdata.frame
使用します。subset
> dat <- data.table( data.frame(x=runif(10),y=rep(letters[1:5],2),z=runif(10)),key='y' )
> subset(dat,select=c(-z))
x y
1: 0.1969049 a
2: 0.7916696 a
3: 0.9095970 b
4: 0.3529506 b
5: 0.4923602 c
6: 0.5993034 c
7: 0.1559861 d
8: 0.9929333 d
9: 0.3980169 e
10: 0.1921226 e
明らかにこれはまだ機能しますが、あまり - のdata.table
ようなイディオムではないようです。保持したい列名のリストを手動で作成できますが、これはもう少しdata.table
似ています。
> dat[,list(x,y)]
x y
1: 0.1969049 a
2: 0.7916696 a
3: 0.9095970 b
4: 0.3529506 b
5: 0.4923602 c
6: 0.5993034 c
7: 0.1559861 d
8: 0.9929333 d
9: 0.3980169 e
10: 0.1921226 e
しかし、そのようなリストを作成する必要がありますが、これは扱いにくいものです。
subset
1 つまたは 2 つの列を簡単に削除する適切な方法はありますか、それともパフォーマンス ヒットを引き起こしますか? そうでない場合、より良い方法は何ですか?
編集
ベンチマーク:
> dat <- data.table( data.frame(x=runif(10^7),y=rep(letters[1:10],10^6),z=runif(10^7)),key='y' )
> microbenchmark( subset(dat,select=c(-z)), dat[,list(x,y)] )
Unit: milliseconds
expr min lq median uq max
1 dat[, list(x, y)] 102.62826 167.86793 170.72847 199.89789 792.0207
2 subset(dat, select = c(-z)) 33.26356 52.55311 53.53934 55.00347 180.8740
しかし、実際にもっと重要なのはsubset
、全体をコピーする場合のメモリですdata.table
。