Использование sumrize_at() с различными аргументами funs()... и другими Q, связанными с полями ошибки
Я нахожусь на ранних стадиях создания пакета для использования данных CHAS из HUD. Данные в основном представляют собой переупакованные данные ACS, которые были скорректированы с учетом региональных различий в среднем доходе семьи, а также с учетом пользовательских таблиц. Есть 18 таблиц на нескольких географических уровнях от переписного участка в наименьшем до штатов в самом большом. До 2013 года файлы уровня тракта были разделены по районам и районам. То есть, если переписной участок является частью одного города, частью другого и частью некорпоративной части графства, для этого переписного участка будет три записи. В дополнение к оценкам, производимым каждой таблицей, есть также пределы погрешности, о которых также сообщается. Дизайн стола выглядит так:
GEOID headvar_2 T8_est1 T8_est2 T8_est3 ... T8_moe1 T8_moe2 T8_moe3
1011.1 Tct 11, pt1 224 0 0 38 12 12
1011.2 Tct 11, pt2 etc..................
1013.1 Tct 13, pt1
1013.2 Tct 13, pt2
1014.0 Tct 14
Функции, которые я создал, в основном очищают некоторые поля заголовка и могут преобразовывать данные в длинный формат, который будет выглядеть примерно так:
GEOID headvar_2 table var_type var value
1011.1 Tct 11, pt1 T8 est 1 224
1011.1 Tct 11, pt1 T8 est 2 0
1011.1 Tct 11, pt1 T8 est 3 0
1011.1 Tct 11, pt1 T8 moe 1 38
1011.1 Tct 11, pt1 T8 moe 2 12
1011.1 Tct 11, pt1 T8 moe 3 12
Приведенный выше пример - мой желаемый формат, но я не уверен, как его обобщить с помощью dplyr на моем текущем уровне знаний / навыков в R, поэтому они остаются в широком формате.
Реальная проблема, с которой я сталкиваюсь, заключается в том, как суммировать (суммировать) оценки, где они сгруппированы по GEOID, одновременно правильно вычисляя предел погрешности И сохраняя вспомогательные заголовочные файлы. В пакете tidycensus есть функция допустимого отклонения, что было бы здорово, если бы я мог понять, как его использовать.
cleanup_chas_tract <- function(chas_tract_data, year = 2015) {
# Establish field names to help with field ordering
refcols <- c('source', 'sumlevel', 'geoid', 'geoid2', 'name', 'st', 'cnty_plc')
# Clean up header columns this way if year is after 2012
if (year >= 2013) {
chas_tract_data <- chas_tract_data %>% select(-tract)
names(chas_tract_data)[names(chas_tract_data) == 'cnty'] <- 'cnty_plc'
chas_tract_data$geoid2 <- substr(chas_tract_data$geoid, 8, 18)
chas_tract_data <- chas_tract_data[, c(refcols, setdiff(names(chas_tract_data), refcols))]
return(chas_tract_data)
}
# Clean up header columns a little differently AND sum by split tract ID (geoid2) if 2009 to 2012
else if (year %in% c(2009, 2010, 2011, 2012)) {
chas_tract_data$name <- ''
chas_tract_data$st <- substr(chas_tract_data$geoid, 8, 9)
chas_tract_data$cnty_plc <- substr(chas_tract_data$geoid, 10, 12)
chas_tract_data$geoid2 <- paste0(substr(chas_tract_data$geoid, 8, 12), substr(chas_tract_data$geoid, 23, 28))
# chas_header <- chas_tract_data[1:7]
chas_tract_data <- chas_tract_data[, c(refcols, setdiff(names(chas_tract_data), refcols))]
chas_tract_data <- chas_tract_data %>%
group_by(source, sumlevel, geoid2, name, st, cnty_plc) %>%
summarize_at(vars(names(chas_tract_data[,8:length(names(chas_tract_data))])), funs(sum))
return(chas_tract_data)
} else return(warning("Error: Please select a valid year (2009 through 2015). CHAS 2000 under development."))
}
Таким образом, это работает для суммирования оценок частичных путей, но просто складывает поля погрешности вместе, что не является правильным способом сделать это. Кажется, проблема в том, что таблицы должны разделять функции, но я не уверен, как структурировать мои данные для достижения этой цели. Одним из возможных решений было бы подмножество только столбцов Мо grepl
и запустите отдельный расчет погрешности, а затем заново объедините данные. Есть идеи, как поступить? Как структурировать данные?