如何获取R中两列之间的列名

How to get the column names between two columns in R

R 中是否有函数 returns 列名,包括两个列名之间的和?此函数将开始列和结束列作为输入,return 输入之间和包括输入的列的名称。

例如,假设我正在使用以下数据框:

set.seed(1993)
DF.1 <- data.frame("Q0"= sample(seq(1,100), replace = T, 100))
for(i in seq(1,50, by =1)){
  
  x <-sample(seq(1,100), replace = T, 100)
  DF <- data.frame(x)
  
  names(DF)[names(DF) == "x"] <- paste("Q", i, sep = "")
  
  DF.1 <- cbind(DF.1, DF)
  
}

colnames(DF.1)

一个潜在的函数可能看起来像这样

function(Column Name 1, Column Name 2, data)
function("Q1", "Q5", data = DF.1)

它会输出:

>"Q1"  "Q2"  "Q3"  "Q4"  "Q5"

注意:该函数需要泛化到任何一组列名。

谢谢!

您可以像这样使用 dplyr 包:

library(dplyr) 
df %>% select(Q1:Q5) %>% colnames() 

或作为函数:

find_colnames <- function(c1, c2, data) data %>% select(c1:c2) %>% colnames()

没有额外的包。

names_between <- function(col_1, col_2, data){
  names(data)[which(names(data) == col_1): which(names(data) == col_2)]
  }

names_between("Q1", "Q5", data = DF.1)
[1] "Q1" "Q2" "Q3" "Q4" "Q5"

使用 grepseq.int

f <- function(cn1, cn2, data) {
  pat <- paste(paste0('^', c(cn1, cn2), '$'), collapse='|')
  g <- grep(pat, colnames(data))
  colnames(data)[do.call(seq.int, as.list(g))]
}

f("Q1", "Q5", data=DF.1)
# [1] "Q1" "Q2" "Q3" "Q4" "Q5"