Обследование потребительских расходов — создание переменной веса населения за календарный год

#r #loops #dplyr

#r #циклы #dplyr

Вопрос:

Я пытаюсь запустить код, предоставленный Американским бюро статистики труда, который размещен по этой ссылке:https://www.bls.gov/cex/pumd-getting-started-guide.htm#section5

Код является:

  # Generate a calendar-year population weight variable
    popwt = ifelse(
        qintrvmo %in% 1:3 amp; qintrvyr %in% year,
        (qintrvmo - 1) / 3 * finlwt21 / 4,
        ifelse(
            qintrvyr %in% (year   1),
            (4 - qintrvmo) / 3 *finlwt21 / 4,
            finlwt21 / 4
        )
    )
) %>%
select(-c(qintrvyr, qintrvmo))

mean_exp <- left_join(fmli, mtbi, by = "newid") %>%
mutate(cost = replace(cost, is.na(cost), 0)) %>%
summarise(mean_exp = sum(cost * finlwt21) / sum(popwt)) %>%
unlist`
  

Но при его запуске я получаю ошибку:

Ошибка в UseMethod(«select_»): нет применимого метода для ‘select_’, применяемого к объекту обратной трассировки класса «logical»:

  1. ifelse(newdataQ1$ QINTRVYR %в% 1:3 и newdataQ1$QINTRVYR %в% . 2017, (newdataQ1$ QINTRVMO — 1)/3 * newdataQ1$ FINLWT21/4, . ifelse(newdataQ1$ QINTRVYR %в% (2017 1), (4 — newdataQ1$QINTRVMO)/3 * . newdataQ1$FINLWT21/4, newdataQ1$FINLWT21/4)) %>% выбрать(-c(newdataQ1$QINTRVYR, . newdataQ1$QINTRVMO))
  2. С помощью visible(eval(quote( _fseq ( _lhs )), env, env))
  3. оценка(цитата( _fseq ( _lhs )), env, env)
  4. оценка(цитата( _fseq ( _lhs )), env, env)
  5. _fseq ( _lhs )
  6. freduce(значение, _function_list )
  7. С видимым(function_list[k])
  8. function_list[k]
  9. выберите(., -c(newdataQ1$QINTRVYR, newdataQ1$QINTRVMO))
  10. выберите.default(., -c(newdataQ1$QINTRVYR, newdataQ1$QINTRVMO))
  11. select_(.data, .dots = compat_as_lazy_dots(…))

Кто-нибудь знает, как действовать дальше?

Для контекстуализации я использую CES для расчета общих расходов домохозяйств в течение 2017 года. Опросы включают расходы за 3 месяца, поэтому те, которые были сделаны до марта 2017 года, по-прежнему включают 2 месяца с 2016 года. Поэтому я должен уменьшить вес этих домохозяйств.

 dput(head(newdataQ1))
  

является:

 structure(list(NEWID = c("3386764", "3386774", "3386804", "3386874",
                     "3386884", "3386894"), AGE_REF = c(46L, 65L, 26L, 58L, 74L, 21L), 
           CUTENURE = c(4L, 4L, 4L, 1L, 2L, 4L), EDUC_REF = c(15L, 14L, 13L, 12L, 12L, 11L), 
           FAM_SIZE = c(1L, 1L, 3L, 1L, 2L, 2L), FINCBTAX = c(100000L, 27917L, 65000L, 450L, 30996L, 0L), 
           FINLWT21 = c(15077.66, 19601.516, 22010.799, 7653.231, 22947.961, 25143.718), 
           FSALARYX = c(100000L, 16000L, 65000L, 0L, 0L, 0L), 
           INC_HRS1 = c(50L, 25L, 40L, NA,NA, 40L), 
           INC_HRS2 = c(NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_), 
           INC_RANK = c(0.7957279, 0.3869005, 0.6512021, 0.1028364, 0.416531, 0.0952528), 
           INCWEEK1 = c(52L, 52L, 52L, 0L, 0L, 52L), 
           INCWEEK2 = c(NA, NA, NA, NA, 0L, NA), 
           NUM_AUTO = c(2L, 1L, 0L, 0L, 0L, 1L), 
           POPSIZE = c(2L, 3L, 1L, 3L, 2L, 1L), 
           QINTRVMO = c(1, 1, 1, 1, 1, 1), 
           QINTRVYR = c(2017L, 2017L, 2017L, 2017L, 2017L, 2017L), 
           REF_RACE = c(1L, 2L, 2L, 6L, 1L, 2L), 
           REGION = c(3L, 2L, 1L, 4L, 2L, 3L), 
           TOTEXPPQ = c(27688.0501, 4891.4, 10513.2501, 11577, 17383.8, 10190.9999), 
           TOTEXPCQ = c(0, 0, 0, 0, 0, 0), 
           FDHOMEPQ = c(1710, 260, 1599, 1040, 2080, 1040), 
           FDAWAYPQ = c(50, 130, 260, 650, 0, 0), 
           ALCBEVPQ = c(260, 0, 90, 0, 0, 0), 
           OWNDWEPQ = c(0, 0, 0, 7067, 1144, 0),
           RENDWEPQ = c(1510,   1689, 3300, 0, 0, 5100), 
           OTHLODPQ = c(80, 0, 0, 0, 0, 0), 
           UTILPQ = c(1331, 465, 996, 1680, 1166, 935), 
           HOUSOPPQ = c(171,     183, 294, 135, 654, 81), 
           MISCEQPQ = c(140, 0, 0, 0, 0, 0), 
           APPARPQ = c(170, 92, 75, 0, 100, 160), 
           OTHVEHPQ = c(0, 0,    0, 0, 0, 0), 
           GASMOPQ = c(495, 240, 0, 390, 120, 360), 
           TRNOTHPQ = c(0,    0, 290, 0, 0, 0), 
           HEALTHPQ = c(570, 683.4, 475, 0, 2481.8,     423),                E
           ENTERTPQ = c(225, 70, 550, 240, 0, 144), 
           PERSCAPQ = c(60,     50, 90, 0, 160, 0), 
           READPQ = c(10, 0, 0, 0, 0, 0), 
           EDUCAPQ = c(3800,     0, 0, 0, 0, 31), 
           TOBACCPQ = c(0, 0, 0, 0, 0, 0), 
           INCLASS = c(9L,     5L, 8L, 1L, 6L, 9L), 
           STATE = c(21L, 39L, 36L, 15L, 39L, 12L    ), 
           EVEHPURP = c(0, 801, 0, 0, 972, 0), 
           CUID = c(338676L,     338677L, 338680L, 338687L, 338688L, 338689L)),
      row.names = c(NA, 6L), class = "data.frame")
  

Спасибо!

Комментарии:

1. Было бы проще помочь, если бы вы могли предоставить образец кода с помощью dput(head(df)) . Вы пробовали заменить select на dplyr::select ?

2. @Matt только что обновил выборку. что касается dplyr::select, это не работает