0

データフレーム内のいくつかの変数のインデックスが必要ですが、grep()スキルが不十分です。

このデータフレームがあるとしましょう。

( dfn <- data.frame(
a1   = c(3,  3, 0,  3, 0,   0),
a2   = c(1, NA, 0, NA, 1,   4),
a11  = c(0,  3, NA, 1, 3,   1),
a12  = c(0,  3, NA, 1, 3,   3),
a_12 = c(0,  3, NA, 1, NA, NA),
a_1  = c(12, 3, NA, 1, 4,  NA)) )
  a1 a2 a11 a12 a_12 a_1
1  3  1   0   0    0  12
2  3 NA   3   3    3   3
3  0  0  NA  NA   NA  NA
4  3 NA   1   1    1   1
5  0  1   3   3   NA   4
6  0  4   1   3   NA  NA

さて、私が欲しいのは、a1、a2、a11、およびa12をgrepすることです(実際には、a'の後の#は1から12までの連続したリストです)、どうすればよいですか?以下の2つのgrepを試しましたが、うまくいきませんでした。

foo <- grep('a[1:12]$', names(dfn) )
names(dfn[,foo])
[1] "a1" "a2"

私もこれを試しました、

bar <- grep('a[c(1:12)]$', names(dfn) )
names(dfn[,bar])
[1] "a1" "a2"

私が欲しいのは

[1] "a1" "a2" "a11" "a12"

第二に、誰かが私を良いgrep()チュートリアルに導くことができますか?ありがとう!

4

3 に答える 3

2

あなたが必要grep('a[1:12]+', names(dfn))

実際にはgrep('a[1-9]+', names(dfn))、[1-9] の後の + は、a の後に 1 ~ 9 の値を何度でも繰り返すことができますが、少なくとも 1 回は表示する必要があることを意味します。

于 2013-01-25T00:34:41.857 に答える
1

代わりにこれを行うことができます:

names(dfn)[names(dfn) %in% paste0("a",1:12)]
[1] "a1"  "a2"  "a11" "a12"

インデックスが必要な場合は、次のようになります。

which(names(dfn) %in% paste0("a",1:12))
[1] 1 2 3 4
于 2013-01-25T00:58:53.647 に答える
1
regmatches(names(dfn),regexpr('a[1-9]{1,2}',names(dfn)))
[1] "a1"  "a2"  "a11" "a12"

私の正規表現は次のとおりです:セット内の最小= 1および最大= 2の数値が続く[1-9]

于 2013-01-25T01:05:06.380 に答える