r-使用grep获取列的位置



我有一个大约有100列的数据帧。我想得到某些列的位置,以便以后可以选择它们。这些列的名称通常相同,只是后缀不同,后缀表示年份。

abcd_2011 <- c(1,2,3,4)
xy_2011 <- c(5,6,7,8)
rew_2011 <- c(2,4,6,8)
abcd_2015 <- c(4,7,9,1)
xy_2015 <- c(5,9,1,2)
rew_2015 <- c(4,4,8,7)
df <- data.frame(abcd_2011, xy_2011, rew_2011, abcd_2015, xy_2015, rew_2015)

我设法做到了静态。

k.keep <- grep(c("^abcd_.*2011|xy_.*2011|^rew_"), colnames(df))

然而,我希望*2011是动态的,所以如果我想选择另一年,我只需要更改一次。正如你在上面看到的,仅仅使用grep并查找年份是不可行的,因为我需要一些专栏(rew(的所有年份。。类似以下内容(当然不起作用(。

k.keep <- grep(c("^abcd_.*k.year|xy_.*k.year|^rew_"), colnames(df))

感谢您的帮助。

您可以用参数year定义一个函数,并使用paste0grep中定义模式。

myfn <- function(year){
k.keep <- grep(paste0("^abcd_.*",year,'|xy_.*',year,"|^rew_"), colnames(df))
return(k.keep)
}
> myfn(year = 2011)
[1] 1 2 3 6
> myfn(year = 2015)
[1] 3 4 5 6

最新更新