我不是很擅長回圈,但我正在努力更好地處理它們。我全年使用 tidycensus 來選擇和提取一些變數(下面示例中的虛擬資料具有代表性)。因此,對于一組給定的選定變數 (dv_acs),我想提取綜合碼本中的資訊,您可以通過 load_variables 下載每年的資訊,然后將它們全部加入。在大多數情況下,這將是多年來相同的資訊,但我希望將其完整,以便我可以仔細檢查并注意任何差異。
這是正在運行的設定:
library(tidycensus)
library(dplyr)
#getting codebook for all ACS years for every single variable possible
for(x in c(2009:2020)) {
filename <- paste0("v", x)
assign(filename, (load_variables(x, "acs5", cache = TRUE)))
}
#selecing and recoding variables to pull in
dv_acs = c(
hus = "B25002_001",
husocc = "B25002_002",
husvac = "B25002_003"
)
這是一次完成我想要的一年,從中我可以逐個完成完整的系結
#creating a codebook a year at a time for variables I'm interested in
codebook <- v2009 %>%
filter(name %in% dv_acs) %>%
mutate(id = names(dv_acs), .before = 1)
colnames(codebook) = c("id", "name", "label_2009", "concept_2009")
codebook2 <- v2010 %>%
filter(name %in% dv_acs) %>%
mutate(id = names(dv_acs), .before = 1)
colnames(codebook2) = c("id", "name", "label_2010", "concept_2010")
codebook <- full_join(codebook, codebook2, by=c("id", "name"))
在這里,我嘗試創建一個回圈以一次性為我的特定變數創建代碼本,但未能成功:
#creating a loop to pull in an join a codebook for all years
for(x in c(2009:2010)){
codebook <- data.frame(matrix(ncol = 2, nrow = 0)) #create a master file I can join the the files to as they load in through the loop
colnames(codebook) <- c("id", "name") #giving right label names
filename <- paste0("v", x) #this is where I'm starting to have trouble; this saves as a value, and I can't then use it to call the dataframe
temp <- filename %>% (name %in% dv_acs) %>%
mutate(id = names(dv_acs), .before = 1)
colnames(temp) <- c("id", "name", paste0("label_", x), paste0("concept_", x))
codebook <- full_join(codebook, temp, by=c("id", "name"))
}
報告的錯誤是:“名稱 %in% dv_acs 中的錯誤:找不到物件‘名稱’”
uj5u.com熱心網友回復:
最好不要在全域環境中創建物件。相反,它可以存盤在list
. 在這里,可以使用以下方法檢索物件的值mget
library(stringr)
library(purrr)
library(dplyr)
out <- mget(str_c("v", 2009:2020)) %>%
imap(~ {
nm <- str_c(c("label", "concept"), str_remove(.y, "v"))
.x %>%
select(-any_of("geography")) %>%
filter(name %in% dv_acs) %>%
mutate(id = names(dv_acs), .before = 1) %>%
rename_with(~ nm, c("label", "concept"))
}) %>%
reduce(full_join)
-輸出
> out
# A tibble: 3 × 26
id name label…1 conce…2 label…3 conce…? label…? conce…? label…? conce…? label…? conce…? label…? conce…? label…? conce…? label…? conce…? label…? conce…? label…?
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 hus B250… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima…
2 huso… B250… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima…
3 husv… B250… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima…
# … with 5 more variables: concept2018 <chr>, label2019 <chr>, concept2019 <chr>, label2020 <chr>, concept2020 <chr>, and abbreviated variable names 1?label2009,
# 2?concept2009, 3?label2010, ??concept2010, ??label2011, ??concept2011, ??label2012, ??concept2012, ??label2013, ??concept2013, ??label2014, ??concept2014, ??label2015,
# ??concept2015, ??label2016, ??concept2016, ??label2017, ??concept2017, ??label2018
如果我們想要一切都不需要list
在全域環境中創建物件
out <- map(2009:2020, ~ {
nm <- str_c(c("label", "concept"), "_", .x)
load_variables(.x, "acs5") %>%
select(-any_of("geography")) %>%
filter(name %in% dv_acs) %>%
mutate(id = names(dv_acs), .before = 1) %>%
rename_with(~ nm, c("label", "concept"))
}) %>%
reduce(full_join)
-輸出
> out
# A tibble: 3 × 26
id name label…1 conce…2 label…3 conce…? label…? conce…? label…? conce…? label…? conce…? label…? conce…? label…? conce…? label…? conce…? label…? conce…? label…?
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 hus B250… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima…
2 huso… B250… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima…
3 husv… B250… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima… OCCUPA… Estima…
# … with 5 more variables: concept_2018 <chr>, label_2019 <chr>, concept_2019 <chr>, label_2020 <chr>, concept_2020 <chr>, and abbreviated variable names
# 1?label_2009, 2?concept_2009, 3?label_2010, ??concept_2010, ??label_2011, ??concept_2011, ??label_2012, ??concept_2012, ??label_2013, ??concept_2013, ??label_2014,
# ??concept_2014, ??label_2015, ??concept_2015, ??label_2016, ??concept_2016, ??label_2017, ??concept_2017, ??label_2018
# ? Use `colnames()` to see all variable names
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/520925.html
標籤:rtidyverse
上一篇:計算兩列之間的差異并乘以總和