R 根据日期和时间删除没有实际更新的行,但保留第一个实例
我在试图解决这个问题时遇到了困难,希望有人能帮助我。我正在尝试实现一种过滤数据集的方法,该数据集反映了带有时间戳的自行车站占用率数据R 根据日期和时间删除没有实际更新的行,但保留第一个实例,r,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
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
我想删除自行车可用性没有变化的行,只保留第一个实例。
我希望生成的数据集如下所示:
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")
任何帮助或反馈都将不胜感激。我们根据“Bike.Availability”的“ID”和运行长度ID进行分组,即它根据“Bike.Availability”相邻元素的相似性创建分组索引,然后
切片第一行的切片头指定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
我们根据“Bike.Availability”的“ID”和运行长度ID进行分组,即它根据“Bike.Availability”相邻元素的相似性创建分组索引,然后切片
第一行,其中切片头
指定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
单独使用dplyr
解决方案。检查上下行是否相同ifelse
。然后NA
到0
,然后过滤
library(dplyr)
bike_data %>%
mutate(same = ifelse(Bike.Availability == lag(Bike.Availability), 1, 0)) %>%
mutate(same = ifelse(is.na(same), 0, same)) %>%
filter(same=="NA" | same==0) %>%
select(-same)
输出:
ID Time Bike.Availability
1 2 01/04/2020 04:31:16 11
3 2 01/04/2020 04:50:15 10
5 2 01/04/2020 05:07:19 9
6 2 01/04/2020 05:19:38 10
8 2 01/04/2020 06:43:54 11
单独使用dplyr
解决方案。检查上下行是否相同ifelse
。然后NA
到0
,然后过滤
library(dplyr)
bike_data %>%
mutate(same = ifelse(Bike.Availability == lag(Bike.Availability), 1, 0)) %>%
mutate(same = ifelse(is.na(same), 0, same)) %>%
filter(same=="NA" | same==0) %>%
select(-same)
输出:
ID Time Bike.Availability
1 2 01/04/2020 04:31:16 11
3 2 01/04/2020 04:50:15 10
5 2 01/04/2020 05:07:19 9
6 2 01/04/2020 05:19:38 10
8 2 01/04/2020 06:43:54 11