[英]Remove rows based on date and time where no update actually occurs but keep the first instance
我在試圖解決這個問題時遇到了困難,希望有人能提供幫助。 我正在嘗試實現一種過濾此數據集的方法,該數據集反映了帶有時間戳的自行車站占用數據。
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_head
指定n = 1
對第一行進行slice
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"))
單獨的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)
Output:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.