добавить конкретную новую строку, используя dplyr, основываясь на некоторых условиях в r - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть df, как показано ниже, я хочу добавить новую строку на основе ID и semester_num.пока использование dplyr будет:

df %>%
 group_by(ID) %>%
 group_by(semster_num) %>%
 #add new row here  

Я хочу, чтобы в новой строке были все записи, подобные предыдущей строке , за исключением значение третьего столбца (subject_result2) должно бытьтакой же, как столбец 4 (Success) предыдущей строки.

tibble::tribble(
      ~ID, ~semester_num,   ~subject_result2,    ~Success,
  100000L,             1, "OTHERPassedTerm1", "Grad_ENSC",
  100000L,             1, "OTHERPassedTerm1", "Grad_ENSC",
  100000L,             1, "OTHERPassedTerm1", "Grad_ENSC",
  100000L,             2, "MATH1PassedTerm1", "Grad_ENSC",
  100000L,             2, "OTHERPassedTerm1", "Grad_ENSC",
  100000L,             2, "OTHERPassedTerm1", "Grad_ENSC",
  200000L,             1, "OTHERPassedTerm2", "fail",
  200000L,             1, "MATH1PassedTerm2", "fail",
  200000L,             2, "MATH1PassedTerm2", "fail",
  200000L,             2, "OTHERPassedTerm2", "fail"
  )

результат: (я указываю вновь добавленные строки)

          ~ID, ~semester_num,   ~subject_result2,    ~Success,
      100000L,             1, "OTHERPassedTerm1", "Grad_ENSC",
      100000L,             1, "OTHERPassedTerm1", "Grad_ENSC",
      100000L,             1, "OTHERPassedTerm1", "Grad_ENSC",
 >>   100000L,             1, "Grad_ENSC",        "Grad_ENSC",
      100000L,             2, "MATH1PassedTerm1", "Grad_ENSC",
      100000L,             2, "OTHERPassedTerm1", "Grad_ENSC",
      100000L,             2, "OTHERPassedTerm1", "Grad_ENSC",
 >>   100000L,             2, "Grad_ENSC",        "Grad_ENSC",
      200000L,             1, "OTHERPassedTerm2", "Grad_ENSC",
      200000L,             1, "MATH1PassedTerm2", "fail",
 >>   200000L,             1, "Fail",             "fail",
      200000L,             2, "MATH1PassedTerm2", "fail",
      200000L,             2, "OTHERPassedTerm2", "fail",
 >>   200000L,             2, "fail,              "fail

Пожалуйста, помогите реализовать это в r.(можно использовать и другие пакеты)

1 Ответ

0 голосов
/ 22 декабря 2018

Вы можете сделать это, комбинируя do с tibble::add_row.Я основал этот ответ на ответе на этот вопрос: Добавьте строки в каждой группе, используя dplyr и add_row () , в частности комментарий @ JasonWang

df %>%
    dplyr::group_by(ID, semester_num) %>%
    do(tibble::add_row(.,
                       ID = .$ID[1],
                       semester_num = .$semester_num[1],
                       subject_result2 = .$Success[nrow(.)], #Get the last row of the group
                       Success = .$Success[nrow(.)]))

# A tibble: 14 x 4
# Groups:   ID, semester_num [4]
       ID semester_num subject_result2  Success  
    <int>        <dbl> <chr>            <chr>    
 1 100000            1 OTHERPassedTerm1 Grad_ENSC
 2 100000            1 OTHERPassedTerm1 Grad_ENSC
 3 100000            1 OTHERPassedTerm1 Grad_ENSC
 4 100000            1 Grad_ENSC        Grad_ENSC
 5 100000            2 MATH1PassedTerm1 Grad_ENSC
 6 100000            2 OTHERPassedTerm1 Grad_ENSC
 7 100000            2 OTHERPassedTerm1 Grad_ENSC
 8 100000            2 Grad_ENSC        Grad_ENSC
 9 200000            1 OTHERPassedTerm2 fail     
10 200000            1 MATH1PassedTerm2 fail     
11 200000            1 fail             fail     
12 200000            2 MATH1PassedTerm2 fail     
13 200000            2 OTHERPassedTerm2 fail     
14 200000            2 fail             fail  

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...