Rでの名前による列インデックスの検索[終了]


11

データフレームで、列のインデックスを名前で取得します。例えば:

x <- data.frame(foo=c('a','b','c'),bar=c(4,5,6),quux=c(4,5,6))

「棒」の列インデックスを知りたい。

私は次のことを思いつきましたが、それは洗練されていないようです。私が見逃しているもっと簡単なビルトインはありますか?

seq(1,length(names(x)))[names(x) == "bar"]
[1] 2

3
match("bar",names(x))も機能しますmatchが、最初の引数もベクトルの場合はさらに便利です。
枢機卿、

実際に列のインデックスが必要ですか?通常のx $バーと同様に、x [、 "bar"]を使用して列全体を取得することもできます。どちらの場合も、行に下付き文字を付けます:x [2:3、 "bar"]またはx $ bar [2:3]。インデックスを必要とするルーチンにインデックスをフィードする必要がある場合、それはもちろん役に立ちません。
ウェイン

ええと、それは私のドル記号をめちゃくちゃにし続けます。結論として、列名のドル記号メソッドを使用し、それを添え字として含めるには2つの方法があります。
ウェイン、

3
この質問は、Rで何かを行う方法についてであり、関連する統計的な問題についてではないため、トピックから外れているようです。
ガン-モニカの復活

回答:


21

おそらくこれが最も簡単な方法です:

which(names(x)=="bar")

11

別の可能性を追加するためだけ
です。通常は使用できますが、grep正規表現を使用してより洗練された方法でこれらの種類のジョブを実行することは、その子孫です(つまり、grepl)。

あなたの例では、あなたは列インデックスを得ることができます:

grep("^bar$", colnames(x)) または grep("^bar$", names(x))

^そして$、それぞれの文字列の先頭と末尾のメタ文字です。

詳細については?grepと特に?regexを確認してください(つまり、名前/一致の一部しか取得できない、または戻り値が文字列自体または論理ベクトルである、など)。

私にとってgrepは、Rっぽいです。

強く関連しているのは、Hadley Wickhemによる最近のパッケージであるstringrです。これは、grepのような関数を含む「モダンで一貫した文字列処理」用のパッケージです。彼は最近、それに関する論文をR Journalに発表しました。

同じ問題に関するstackoverflowに関する私の回答も参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.