3

データ フレームの列名を (R の) 文字列ではなく変数として参照する方法はありますか? データフレーム df の最初の列名を取得したいとします。コード colnames が返す...

> colnames(df)[[1]]
[1] "colname1" 

私が尋ねる理由は、関数サブセットを任意のデータ フレームに一般化するのに苦労しているからです。既知の条件付きのデータ フレームで条件付きサブセットを実行したいとしますが、実行時の列名 (列番号だけ) がわかりません。例 -

> df<-data.frame( x=c(1:3), y=c(4:6))
> df.sub <- subset(df, df$y >5 )

しかし、実行時に df の列名がわからず、その列番号が 2 であるだけだとしましょう。関数呼び出し

> df.sub <- subset(df, colnames(df)[[2]] >5 )

colnames は文字列を返し、サブセットは「スマート」であり、df 内でオブジェクト名を検索するため、機能しません。これを回避する良い方法はありますか?[ 代わりに使用できますが、問題は同じだと思います。

4

1 に答える 1

4

名前またはインデックス番号のいずれかに対して、二重角括弧を正常に使用できるはずです。

> subset(df, df[["y"]] > 5)
  x y
3 3 6
> subset(df, df[[2]] > 5)
  x y
3 3 6

ただし、ヘルプ ページから までの次の点に注意してくださいsubset

警告

これは、インタラクティブに使用するための便利な関数です。プログラミングでは、[ などの標準のサブセット化関数を使用する方が適切です。特に、引数サブセットの非標準的な評価は、予期しない結果をもたらす可能性があります。


そして、悪いアドバイスをするために、次を使用することもできますget

> subset(df, get(colnames(df)[2]) > 5)
  x y
3 3 6

@Roland がコメントで指摘しているように、ほとんどの R ユーザーは実際には次のようなものを使用します。

> df[df[[2]] > 5, ]
  x y
3 3 6
于 2013-10-16T17:23:37.653 に答える