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