首页 > 解决方案 > 选择给定月份中值的第一次和最后一次出现

问题描述

我有一个数据集,它记录了在给定月份中来自某个 ID 的组中的更改。在示例中,7 月份,ID 5 从第 2 组更改为第 1 组,然后从第 1 组更改为第 2 组,依此类推。我只需要获取此 ID/月中所做的第一个和最后一个更改。

ID  groupTO groupFROM   MONTH
5   2   1   6
5   1   2   7
5   2   1   7
5   3   2   7
5   1   3   7
5   2   1   8
5   1   2   8
5   2   1   8
6   1   2   6
6   3   1   6
6   2   1   7
6   3   2   8
6   1   3   8

在这种情况下,我需要的结果是:

ID  groupTO groupFROM   MONTH
5   2   1   6
5   1   2   7
5   1   3   7
5   2   1   8
5   2   1   8
6   1   2   6
6   3   1   6
6   2   1   7
6   3   2   8
6   1   3   8

如果我删除重复项(ID/MONTH),我可以获得第一次出现,但我如何获得最后一次?

标签: r

解决方案


这是使用 dplyr 的一种简单方法;

library(dplyr)

# Create data
dt <- 
  data.frame(Id = c(rep(5, 8), rep(6, 5)), 
             groupTO = c(2, 1, 2, 3, 1, 2, 1, 2, 1, 3, 2, 3, 1),
             groupFROM = c(1, 2, 1, 2, 3, 1, 2, 1, 2, 1, 1, 2, 3),
             MONTH = c(6, 7, 7, 7, 7, 8, 8, 8, 6, 6, 7, 8, 8))

dt %>%
  # Group by ID and month
  group_by(Id, MONTH) %>%
  # Get first and last row
  slice(c(1, n())) %>%
  # To remove cases where first is same as last
  distinct()

# # A tibble: 9 x 4
# # Groups:   Id, MONTH [6]
# Id groupTO groupFROM MONTH
# <dbl>   <dbl>     <dbl> <dbl>
# 5       2         1     6
# 5       1         2     7
# 5       1         3     7
# 5       2         1     8
# 6       1         2     6
# 6       3         1     6
# 6       2         1     7
# 6       3         2     8
# 6       1         3     8

推荐阅读