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

现在,我想要的是grep a1、a2、a11 和 a12(在现实生活中,a' 后面的 # 是从 1 到 12 的连续列表),我该怎么做?我已经尝试了下面的两个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] 之后加上 +,这意味着 1-9 中的值可以在 a 之后重复任意次数,但必须至少出现一次。

于 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"

我的正则表达式是:a 后跟 min =1 和 max =2 集合中的数字 [1-9]

于 2013-01-25T01:05:06.380 回答