r - 如何根据日期组的最新日期过滤数据?
问题描述
我知道我的问题并不像应该的那么清楚,所以我希望我的解释会让它更容易理解。我有这样的数据:
# total_call data
call_id | from_number | retrieved_date
1 1 2020-01-12 12:03:34
2 1 2020-01-12 12:06:34
3 2 2020-01-15 13:02:40
4 2 2020-01-15 13:05:40
5 1 2020-01-12 13:09:34
我想按from_number
和 retrieved_date
变量对调用进行分组,其时间必须在最早的 1 小时内。1小时后,它属于一个新组。然后我想过滤每组的最新时间。这是我想要的结果:
# total_call data
call_id | from_number | retrieved_date
2 1 2020-01-12 12:06:34
4 2 2020-01-15 13:05:40
5 1 2020-01-12 13:09:34
感谢您的关注。我期待着您的回复。
解决方案
我们转换 retrieved_date
为POSIXct
格式,arrange
数据并在当前retrieved_date
大于前retrieved_date
一个多小时时创建一个新组,并选择具有 max 的行retrieved_date
。
library(dplyr)
df %>%
mutate(retrieved_date = lubridate::ymd_hms(retrieved_date)) %>%
arrange(from_number, retrieved_date) %>%
group_by(from_number) %>%
group_by(gr = cumsum(difftime(retrieved_date, lag(retrieved_date,
default = first(retrieved_date)), units = "hours") > 1),add = TRUE) %>%
slice(which.max(retrieved_date)) %>%
ungroup() %>%
select(-gr)
# A tibble: 3 x 3
# call_id from_number retrieved_date
# <int> <int> <dttm>
#1 2 1 2020-01-12 12:06:34
#2 5 1 2020-01-12 13:09:34
#3 4 2 2020-01-15 13:05:40
数据
df <- structure(list(call_id = 1:5, from_number = c(1L, 1L, 2L, 2L,
1L), retrieved_date = structure(c(1L, 2L, 4L, 5L, 3L),
.Label = c("2020- 01-12 12:03:34","2020-01-12 12:06:34", "2020-01-12 13:09:34",
"2020-01-15 13:02:40", "2020-01-15 13:05:40"), class = "factor")),
class = "data.frame", row.names = c(NA, -5L))
推荐阅读
- variables - 在 Dreamhost 上存储秘密变量和密钥
- reactjs - 无法使用 ReactJs、Axios、Redux 渲染/显示从 api 获取的数据
- javascript - 使用 RSA 私钥解密 Web 应用程序中的数据
- python - 为什么 PyTorch 优化器可能无法更新其参数?
- flutter - 带有身份验证和 Web 支持的颤动导航 - 定义主路由
- swift - 在 Swift 中将文本打印到崩溃文件
- keyboard - azure cloud shell 上的奇怪键盘响应
- .net - pythonnet安装失败
- php - Symfony“无效凭据”
- docker - 当我在容器中访问 nginx 时,我得到 curl: (56) Recv failure: Connection reset by peer