Суммирование и отбрасывание сгруппированных переменных - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть фрейм данных этой формы

familyid memberid year contract  months
    1       1     2000    1        12
    1       1     2001    1        12
    1       1     2002    1        12
    1       1     2003    1        12
    2       3     2000    2        12
    2       3     2001    2        12
    2       3     2002    2        12
    2       3     2003    2        12
    3       2     2000    1        5
    3       2     2000    2        5
    3       2     2001    1        12
    3       2     2002    1        12
    3       2     2003    1        12
    4       1     2000    2        12
    4       1     2001    2        12
    4       1     2002    2        12
    4       1     2003    2        12
    5       2     2000    1        8
    5       2     2001    1        12
    5       2     2002    1        12
    5       2     2003    1        4
    5       2     2003    1        6

Я хочу вернуть фрейм данных, например

   familyid memberid year contract  months
    1       1     2000    1        12
    1       1     2001    1        12
    1       1     2002    1        12
    1       1     2003    1        12
    2       3     2000    2        12
    2       3     2001    2        12
    2       3     2002    2        12
    2       3     2003    2        12
    4       1     2000    2        12
    4       1     2001    2        12
    4       1     2002    2        12
    4       1     2003    2        12
    5       2     2000    1        8
    5       2     2001    1        12
    5       2     2002    1        12
    **5       2     2003    1        10**

По сути, я хочу суммировать переменные месяцы, если они в одном и том же familyid показывают одинаковое значениедля переменной "контракт" (в моем примере я суммирую 6 и 4 для familyid = 5 в год = 2003).Тем не менее, я также хочу отбросить фамилии, которые показывают, в течение одного года, два разных значения для переменного контракта (в моем случае я отбрасываю familyid = 3, поскольку он показывает контракт = 1 и контракт = 2 в год = 2000).Что касается других наблюдений, я хочу оставить все как есть.

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

Спасибо, кто мне помог.Marco

1 Ответ

0 голосов
/ 25 сентября 2018

Вы упомянули, что хотели получить общее количество месяцев в рамках одного контракта одной семьи за один год, а также полностью удалить семьи с более чем одним контрактом в год.Вот один из подходов:

library(dplyr)
df2 <- df %>% 
  group_by(familyid, memberid, year, contract) %>%
  summarize(months = sum(months, na.rm = T)) %>% 

  # We need this to answer the second part. How many contracts did this family have this year?
  mutate(contracts_this_yr = n()) %>%
  ungroup() %>%

  # Only include the families with no years of multiple contracts
  group_by(familyid, memberid) %>%
  filter(max(contracts_this_yr) < 2) %>%
  ungroup()

Вывод

df2
# A tibble: 16 x 5
   familyid memberid  year contract months
      <int>    <int> <int>    <int>  <int>
 1        1        1  2000        1     12
 2        1        1  2001        1     12
 3        1        1  2002        1     12
 4        1        1  2003        1     12
 5        2        3  2000        2     12
 6        2        3  2001        2     12
 7        2        3  2002        2     12
 8        2        3  2003        2     12
 9        4        1  2000        2     12
10        4        1  2001        2     12
11        4        1  2002        2     12
12        4        1  2003        2     12
13        5        2  2000        1      8
14        5        2  2001        1     12
15        5        2  2002        1     12
16        5        2  2003        1     10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...