dplyr mutate: использование переменных, определенных в mutate, при определении других переменных в том же mutate

Я пытаюсь взять около 8 миллионов записей, разделить их на равные группы по квантилю (децили в моем реальном приложении), а затем найти среднее значение для каждой группы. Это, я надеюсь, воспроизводимый пример:

require(Hmisc)  # for weighted functions

year    <- c(10,10,20,20,30,30)
hhinc99 <- c(101,102,301,301,501,502)
wtsupp  <- c(1.1,1.2,1.3,1.5,1.7,1.11)

midy    <- tibble(year, hhinc99, wtsupp)

 midy  %>% 
   group_by(year)   %>% 
   mutate(inc2 <- hhinc99, 
          inc_q_groups <- cut(inc2, breaks = 
                                wtd.quantile(hhinc99, 
                                             weights = wtsupp, 
                                             probs=c(0, .5, 0)))  %>% 
            group_by(inc_q_groups)   %>% 
            summarize(inc_q_means <- 
                        wtd.mean(hhinc99, weights = wtsupp, na.rm=TRUE))) -> 
   inc_dec_means

Когда я запускаю этот код, я получаю следующую ошибку.

Error in mutate_impl(.data, dots) : 
  Evaluation error: object 'inc2' not found.

Раньше я писал функции, в которых переменная mutate определяется в терминах другой переменной mutate, определенной слева от нее. Не уверен, почему не здесь.


person andrewH    schedule 23.11.2017    source источник


Ответы (1)


Я считаю, что это связано с тем, что вы используете <- для назначения внутри мутации, а не =.


library(tidyverse)                      
require(Hmisc)  # for weighted functions

year    <- c(10,10,20,20,30,30)         
hhinc99 <- c(101,102,301,301,501,502)   
wtsupp  <- c(1.1,1.2,1.3,1.5,1.7,1.11)  

midy    <- tibble(year, hhinc99, wtsupp)

midy  %>%                               
group_by(year)   %>%                    
mutate(inc2 <- hhinc99)  

#> # A tibble: 6 x 4
#> # Groups:   year [3]
#>    year hhinc99 wtsupp `inc2 <- hhinc99`
#>   <dbl>   <dbl>  <dbl>             <dbl>
#> 1    10     101   1.10               101
#> 2    10     102   1.20               102
#> 3    20     301   1.30               301
#> 4    20     301   1.50               301
#> 5    30     501   1.70               501
#> 6    30     502   1.11               502
person Ben Weiher    schedule 23.11.2017
comment
После внедрения вашего исправления у меня возникла ошибка, связанная с перерывами, поэтому я добавил немного дрожания в hhinc99. Это избавило от неуникальной ошибки, и нет, я получаю эту: Ошибка в mutate_impl (.data, точки): Ошибка оценки: неиспользованные аргументы (weights = wtsupp, probs = c (0: 10/10)). - person andrewH; 23.11.2017
comment
(ooops. hit retrurn) Не знаете, как mutate может даже видеть веса и пробы? Это аргументы для wtd.quantile, который сам по себе является аргументом для сокращения. Я проголосовал за вас и приму ваш ответ в любом случае, но если у вас есть мысли по поводу этой новой ошибки, обнаруженной путем исправления старой (и последующих), они будут наиболее желанный. - person andrewH; 23.11.2017