使用 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
定义一个函数,并使用 paste0
在 grep
.
中定义模式
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
我有一个包含大约 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
定义一个函数,并使用 paste0
在 grep
.
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