2016-09-14 8 views
0

で名前を使用して、サブセットのデータフレーム列は、それが可能な列名の配列に格納された列名を使用して(新しいDFに)データフレーム列をサブセットすることです"col6")?私はDF [[COLNAME]]の構文を使用してDFに1列を参照することができます知っているが、それは私が複数の列のためにそれを行うことはできません。正確な=正確な.subset2でR - 、(Cのように「col9」「COL1」、 - ベクトルリスト

df 
    X1 X2 X3 
1: a 1 3 
2: b 5 3 
3: a 3 4 
4: c 6 5 
5: c 2 2 

cnm<-c("X2","X3") 

df[[cnm]] 

エラー(X、I、 ):OPのデータセットに基づいて、範囲外の添字

おかげ

+0

感謝 - 最初のものは動作しますが、テーブルにデータフレームに変換する必要があり...> cnm <-c( "X2"、 "X3") > df [cnm] '[.data.table'(df、cnm)のエラー: 私がdata.table(または文字ベクトル)では、xはkeyed(ソートされ、ソートされているとマークされていなければならない)なので、data.tableはどのカラムを結合するかを知り、ソートされたxを利用します。 setkey(x、...)を最初に呼び出します。?setkeyを参照してください。 –

+0

データセットが 'data.table'であるため、2番目のデータセットは機能しません – akrun

答えて

3

、それはdata.tableのように思えます。 data.tableで列をサブセット化するために、我々は?data.tableドキュメントと

によるとwith = FALSE

df[, cnm, with = FALSE] 
# X2 X3 
#1: 1 3 
#2: 5 3 
#3: 3 4 
#4: 6 5 
#5: 2 2 

必要 - TRUEとjはxの枠内で評価される=とデフォルトでは、 の列名を変数として使用できます。

とき= FALSE jには、選択またはフォームStartColがのために列名の文字ベクトル、列位置の数値 ベクトルです:endcol、 と返される値は常にdata.tableです。 with = FALSEは、しばしば で、列を動的に選択するためにdata.tableで便利です。 x [、 cols、= FALSE]は、x [、.SD、.SDcols = cols]と等価であることに注意してください。

データセットがdata.frame場合、単に

setDF(df)#convert to 'data.frame' 
df[cnm] 
# X2 X3 
#1 1 3 
#2 5 3 
#3 3 4 
#4 6 5 
#5 2 2 

データセットのサブセットであろう

[[data.frame又はlist要素適用


の単一の列を抽出するためのものですOPのコードはdata.tableです.subset2で同じエラーメッセージ

df[[cnm]] 

エラーTS(X、I、正確な=正確な):境界

のうち添字

我々はdata.tableにdata.frameのサブセットオプションを行う場合は、私はdata.table場合(または:それは[.data.table(DF、CNM)のいずれかで

df[cnm] 

エラーが動作しません。文字ベクトル)で結合する列は、 'on ='引数(?data.table参照)を使用して のいずれかを指定する必要があります。ソートされました。 、ソート済みとマークされていますか?setkeyを参照してください)。 xがRAM内でソートされるため、キー付きジョインはさらに大きなデータに対して の速度上の利点をもたらす可能性があります。

+0

ありがとうございます - 私はsetDF(df)を見逃しました... –