我正在為 2009-2020 年所有 ACS5 年的 tidycensus 變數創建一個代碼簿。為了確保或標記多年來變數的任何差異,我試圖在最后放置一個檢查列。但是,2018 年的命名中心似乎發生了一些變化,我想忽略這些變化,以便找出真正的問題。
#selecing and recoding variables to pull in
dv_acs = c(
same1 = "B25002_001",
same2 = "B25002_002",
diff1 = "C24010_039"
)
#creating a loop to pull in an join a codebook for all years
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)
#putting in checks
out <- out %>%
rowwise %>%
mutate(label_flag = n_distinct(unlist(across(starts_with('label'),
~ as.character(.x)))) == 1) %>%
ungroup
好的,從上面看,前兩個變數(same1,same2)如果按照我想要的方式作業,將在 label_flag 列中獲得 TRUE 值,但是因為后來幾年在字串中引入了“:”,所以它來了假的。相比之下,diff1 在 2009 年和之后的標簽之間具有真正不同的值(從“Estimate!!Total!Female”變為“Estimate!!Total:!!Female:!!管理、商業、科學和藝術職業: ",這應該在 label_flag 列中顯示為 FALSE。
我不知道我是否應該使用 grepl 引入一些東西,或者以某種方式放入一個字串 dist,并且會很感激你得到的任何解決方案。
uj5u.com熱心網友回復:
我們可以pmap用來遍歷以“label”開頭的選定列的行,洗掉所有的:,然后獲取n_distinct以僅檢查單個唯一值
library(dplyr)
library(purrr)
library(stringr)
out <- out %>%
mutate(label_flag = pmap_int(across(starts_with('label')),
~ n_distinct(str_remove_all(c(...), ":")) == 1))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/520918.html
標籤:rdplyr咕噜咕噜
上一篇:從出生日期計算年齡時處理NA值
下一篇:根據R中列的值分解行
