【问题标题】:Get position of columns by using grep使用 grep 获取列的位置
【发布时间】:2022-01-25 16:10:44
【问题描述】:

我有一个大约 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))

任何帮助表示赞赏。

    标签: r grepl


    【解决方案1】:

    您可以使用参数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
    

    【讨论】: