重命名变量时使用 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。
我正在尝试使用 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。