r - 根据实际未发生更新但保留第一个实例的日期和时间删除行
问题描述
我在试图解决这个问题时遇到了困难,希望有人能提供帮助。我正在尝试实现一种过滤此数据集的方法,该数据集反映了带有时间戳的自行车站占用数据。
ID Time Bike.Availability
1 2 01/04/2020 04:31:16 11
2 2 01/04/2020 04:40:07 11
3 2 01/04/2020 04:50:15 10
4 2 01/04/2020 04:57:10 10
5 2 01/04/2020 05:07:19 9
6 2 01/04/2020 05:19:38 10
7 2 01/04/2020 05:29:47 10
8 2 01/04/2020 06:43:54 11
我想删除 Bike.Availability 没有变化的行,只保留第一个实例。我希望生成的数据集如下所示:
ID Time Bike.Availability
1 2 01/04/2020 04:31:16 11
2 2 01/04/2020 04:50:15 10
3 2 01/04/2020 05:07:19 9
4 2 01/04/2020 05:19:38 10
5 2 01/04/2020 06:43:54 11
我已经转换了时间戳:
bike_data$Time <- as.POSIXct(bike_data$Time,format="%Y-%m-%d %H:%M:%S")
我尝试了不同的变体:
library(dplyr)
bike_data %>%
group_by(Time) %>%
arrange(Bike.Availability) %>%
top_n(1)
任何帮助或反馈将不胜感激。
解决方案
我们按 'Bike.Availability' 的 'ID' 和 run-length-id 进行分组,即它根据 'Bike.Availability' 的相邻元素的相似性创建一个分组索引,然后slice
在第一行slice_head
指定n = 1
library(dplyr)
library(data.table)
bike_data %>%
group_by(ID, grp = rleid(Bike.Availability)) %>%
slice_head(n = 1) %>%
ungroup %>%
select(-grp)
-输出
# A tibble: 5 x 3
# ID Time Bike.Availability
# <int> <chr> <int>
#1 2 01/04/2020 04:31:16 11
#2 2 01/04/2020 04:50:15 10
#3 2 01/04/2020 05:07:19 9
#4 2 01/04/2020 05:19:38 10
#5 2 01/04/2020 06:43:54 11
按“时间”列分组将创建每个组具有单个观察值的组(基于“时间”中显示的值),因此top_n(1)
返回原始数据集而不是子集
数据
bike_data <- structure(list(ID = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L),
Time = c("01/04/2020 04:31:16",
"01/04/2020 04:40:07", "01/04/2020 04:50:15", "01/04/2020 04:57:10",
"01/04/2020 05:07:19", "01/04/2020 05:19:38", "01/04/2020 05:29:47",
"01/04/2020 06:43:54"), Bike.Availability = c(11L, 11L, 10L,
10L, 9L, 10L, 10L, 11L)), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8"))
推荐阅读
- c# - 未找到在具有 C# 进程的特定用户下运行 powershell 的凭据
- javascript - 如何使用数据绑定从用户输入中获取值并使用 {{ ...}} 与内容进行多重播放
- javascript - 在 firebase 实时数据库 web 中写入数据
- java - 使用 Quarkus 和 Resteasy 在运行时定义客户端目标 URL
- kubernetes - Istio 安装成功但无法部署 POD
- javascript - 池和事务的 Node.js MySQL 错误处理
- linux - linux将缺少的qoutes附加到csv字段/标题
- android - 带有片段的 NullPointerException 事件总线订阅方法
- amazon-web-services - 访问另一个用户创建的 EC2 实例
- arrays - 一个定制的画廊。我如何使用 *ngFor 或其他东西在每个 div 上显示不同的图像?