Использование 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 и запустите отдельный расчет погрешности, а затем заново объедините данные. Есть идеи, как поступить? Как структурировать данные?

0 ответов

Другие вопросы по тегам