r - 选择给定月份中值的第一次和最后一次出现
问题描述
我有一个数据集,它记录了在给定月份中来自某个 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),我可以获得第一次出现,但我如何获得最后一次?
解决方案
这是使用 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
推荐阅读
- aem - 用于组件的 Adobe AEM (Adobe Experience Manager) HTL2HTML
- c++ - C++ 非特化模板类型对象列表?
- json - Ruby Time#to_json 作为浮点数
- excel - VBA 宏创建 PPT 演示文稿
- android - 带有重力的全屏视图。设置过扫描值时,BOTTOM 会被意外剪裁
- spring - Mongo Spring 投影查询
- google-app-maker - 如何在 AppMaker 中查看我的“默认”类型 Cloud SQL 数据库的内容?
- aws-lambda-edge - Cloudfront 有条件到期
- button - 带有样式组件的具有快门水平效果的按钮
- r - 对从批处理文件运行 R 与直接从 shell 运行 R 之间的区别感到困惑