使用 grep 获取列的位置

Get position of columns by using grep

我有一个包含大约 100 列的数据框。我想获得某些列的位置,以便稍后可以 select 它们。这些列通常被命名为相同的,只是其后缀不同,表示年份。

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 是动态的,这样我只需更改一次,如果我想再 select 一年的话。正如您在上面看到的,仅使用 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