R:当列中的值在纵向数据中相同时,如何保留相同 ID 中的最后 2-3 行?

R: How can I retain the 2-3 last rows within the same IDs when the values in a column are the same in longitudinal data?

使用 R,我想 select 纵向数据相同 ID 中的最后一行。但是,当时间列中的值相同时(例如,ID 1 的值为 5,ID 3 的值为 4),我想在相同的 ID 中保留最后 2-3 行(ID 1 为 2 行)和 ID 3 的 3 行)。如果相同 ID 的时间列中的值不同,我只想保留最后一行(例如,ID 2 的值为 7)。

我的数据框如下:

id time    dx    code
1   1   primary   A1
1   5   primary   D2
1   5   secondary B3
2   1   primary   A2
2   7   primary   C4
3   4   primary   A1
3   4   secondary B3
3   4   tertiary  D2

我想要以下结果:

id time    dx    code
1   5   primary   D2
1   5   secondary B3
2   7   primary   C4
3   4   primary   A1
3   4   secondary B3
3   4   tertiary  D2

当我使用以下 R 脚本时,d %>% group_by(id) %>% filter(row_number() == n()),它们只保留每个 ID 中的最后一行。如有任何帮助,我们将不胜感激!

您也可以 group_by dx 并使用 slice_tail:

dat %>% 
  group_by(id, dx) %>% 
  slice_tail(n = 1)

# A tibble: 6 x 4
# Groups:   id, dx [6]
     id  time dx        code 
  <int> <int> <chr>     <chr>
1     1     5 primary   D2   
2     1     5 secondary B3   
3     2     7 primary   C4   
4     3     4 primary   A1   
5     3     4 secondary B3   
6     3     4 tertiary  D2