dplyr tidyr для расширения и суммирования определенных столбцов

Я изо всех сил пытаюсь использовать dplyr и tidyr, чтобы принять df в этой форме:

myDf <- data.frame(id = c(1,1,1,1,2,2),
                   event = c('a','b','a','b','a','b'),
                   a_property = c(1,NA,2, NA, 3, NA),
                   b_property = c(NA,2,NA, 3, NA, 4))

> myDf
id event a_property b_property
1     a          1         NA
1     b         NA          2
1     a          2         NA
1     b         NA          3
2     a          3         NA
2     b         NA          4    

и преобразовать в желаемый формат:

id count_event_a count_event_b sum_property_a sum_property_b
1             2             2              3              5
2             1             1              5              4

person user2579689    schedule 27.09.2016    source источник
comment
Сделайте два шага. Измените форму, как этот вопрос: stackoverflow. com / questions / 20620492 /, а затем summarize (), чтобы получить количество / суммы.   -  person MrFlick    schedule 27.09.2016


Ответы (2)


Немного более общее:

myDf %>%
  gather(key, value, -id, -event) %>%
  filter(!is.na(value)) %>%
  group_by(id, event) %>%
  summarise(count = n(),
            sum = sum(value)) %>%
  gather(key, value, -id, -event) %>%
  unite(measure, key, event) %>%
  spread(measure, value)
person JasonAizkalns    schedule 27.09.2016

myDf %>% 
  group_by(id) %>% 
  summarise(count_event_a = sum(!is.na(a_property)), 
            count_event_b = sum(!is.na(b_property)),
            sum_property_a = sum(a_property, na.rm = TRUE),
            sum_property_b = sum(b_property, na.rm = TRUE)) %>%
  ungroup()

В вашем примере есть опечатка. Ответ должен быть таким:

# A tibble: 2 × 5
     id count_event_a count_event_b sum_property_a sum_property_b
  <dbl>         <int>         <int>          <dbl>          <dbl>
1     1             2             2              3              5
2     2             1             1              3              4
person Costin    schedule 27.09.2016