重命名变量时使用 numlist 循环

Using a numlist loop when renaming variables

我正在尝试使用 tidyverse/dplyr 在 R 中重命名两种类型的变量。第一种类型“var_a_year”,我想将其重命名为“sample_year”。第二类变量“var_b_7”,我想重命名为“index_year”。

第二个变量“var_b”从第一年“2004”的数字 7 开始。并且每年增加2个。因此对于 2005 年,第二个类型变量称为“var_b_9”,如图所示。

我想使用一个循环,这样我就可以更快地完成这个过程,而不是每年都写一行。

非常感谢!

df <- df %>% 
    rename(
      sample_2004 = var_a_2004, index_2004 = var_b_7,
      sample_2005 = var_a_2005, index_2005 = var_b_9,
      sample_2006 = var_a_2006, index_2006 = var_b_11,
      sample_2007 = var_a_2007, index_2007 = var_b_13,
      ...
      sample_2020 = var_a_2020, index_2020 = var_b_39)

不需要使用循环。 rename_with 会成功的:

df <- tibble(var_a_2004=NA, var_b_7=NA, var_a_2005=NA, var_b_8=NA)

renameA <- function(x) {
  return(paste0("sample_", stringr::str_sub(x, -4)))
}

df %>% rename_with(renameA, starts_with("var_a"))

给予

# A tibble: 1 x 4
  sample_2004 var_b_7 sample_2005 var_b_8
  <lgl>       <lgl>   <lgl>       <lgl>  
1 NA          NA      NA          NA

我将留给您解决如何为您的 var_b_XXXX 列编写相应函数的代码。

另外Limey的回答:

#sample data
df <- structure(list(var_a_2004 = NA, var_b_7 = NA, var_a_2005 = NA, 
    var_b_9 = NA), row.names = c(NA, -1L), class = "data.frame")

#load data.table package
library(data.table)

#set df to data.table
dt <- as.data.table(df)

#convert var_a in columnnames to sample_
colnames(dt) <- gsub("var_a_", "sample_", colnames(dt))

#use a loop to replace var_b to index_
for(i in 2004:2005){
  year <- i
  nr <- 2* i -4001
  setnames(dt, old = paste0("var_b_", nr), new = paste0("index_", year))
}

此函数现在适用于 2004:2005 年以匹配样本数据。您可以为您的数据集将其更改为 2004:2020。