【发布时间】:2021-07-08 19:57:54
【问题描述】:
我正在处理 PUMS 数据,并且正在使用 tidycensus 转换某些列的值。但是,这会添加一个具有结构的新列:columnname_label。我想使用 mutate 将原始列替换为 columnname_label 中的新翻译值。这是我的数据框的示例:
df <-data.frame(Region= c(1,2,1,4,3,1),
Region_label = c("North", "South", "North", "West", "East", "North"),
Broadband = c(0,1,0,0,0,1)
Broadband_label = c("No","Yes","No","No","No","Yes")
Hispeed = c(1,1,0,0,1,0)
Hispeed_label = c("Yes", "Yes","No","No","Yes","No")
我知道我可以使用 tidycensus 写出这样的代码:
library(tidyverse)
recode <- df %>% mutate(Region = Region_label) %>% mutate(Broadband = Broadband_label) %>%
mutate(Hispeed = Hispeed_label)
但是,我有 66 列需要与“_label”列匹配。有没有比编写 66 个 mutate 语句更优雅的方法来执行此操作?
我曾尝试使用 mutate_at 编写循环,但它不起作用。
subset1 <- grep('*label*',names(df),value = TRUE)
name <- names(df)
for (i in subset1) {
final <- final_house %>% mutate_at(vars(matches(trimws(name,"right","\\_label"))),i)
}
这不起作用。
谢谢!
【问题讨论】:
标签: r for-loop tidyverse dplyr