posxict 열을 기반으로 데이터 세트를 그룹화하고 싶습니다. 관측치 간의 시간 차이가 이전 관측치와 비교하여 3 시간 이하인 경우 그룹화해야합니다. 그래서 이것은 내 데이터의 샘플입니다.
time type day month gas response
<dttm> <chr> <int> <dbl> <chr> <dbl>
1 2018-08-21 14:30:00 old_std 21 8 benzene_area 10260721
2 2018-08-21 15:30:00 old_std 21 8 benzene_area 2591905
3 2018-11-09 20:00:00 old_std 9 11 benzene_area 684166
4 2018-11-09 23:00:00 old_std 9 11 benzene_area 589498
5 2018-11-10 02:00:00 old_std 10 11 benzene_area 460714
6 2018-11-10 05:00:00 old_std 10 11 benzene_area 490663
7 2018-11-10 11:30:00 old_std 10 11 benzene_area 404947
8 2018-11-10 14:30:00 old_std 10 11 benzene_area 402566
9 2018-11-10 16:30:00 old_std 10 11 benzene_area 362376
10 2018-11-11 00:00:00 old_std 11 11 benzene_area 276184
그리고 이것이 제가 찾고있는 것입니다.
time type day month gas response group
<dttm> <chr> <int> <dbl> <chr> <dbl>
1 2018-08-21 14:30:00 old_std 21 8 benzene_area 10260721 1
2 2018-08-21 15:30:00 old_std 21 8 benzene_area 2591905 1
3 2018-11-09 20:00:00 old_std 9 11 benzene_area 684166 2
4 2018-11-09 23:00:00 old_std 9 11 benzene_area 589498 2
5 2018-11-10 02:00:00 old_std 10 11 benzene_area 460714 2
6 2018-11-10 05:00:00 old_std 10 11 benzene_area 490663 2
7 2018-11-10 11:30:00 old_std 10 11 benzene_area 404947 3
8 2018-11-10 14:30:00 old_std 10 11 benzene_area 402566 3
9 2018-11-10 16:30:00 old_std 10 11 benzene_area 362376 3
10 2018-11-11 00:00:00 old_std 11 11 benzene_area 276184 4
나는 이와 같은 데이터를 그룹화하는 방법을 찾지 못했습니다. 어떤 아이디어?
를 사용 lag
하여 이전 값을 가져오고이를 사용 difftime
하여 시간 차이를 가져오고 차이가 3 시간 이상일 때마다 그룹 값을 증가시킬 수 있습니다.
library(dplyr)
df %>%
mutate(group = cumsum(difftime(time, lag(time, default = first(time)),
units = "hours") > 3) + 1)
# time type day month gas response group
#1 2018-08-21 14:30:00 old_std 21 8 benzene_area 10260721 1
#2 2018-08-21 15:30:00 old_std 21 8 benzene_area 2591905 1
#3 2018-11-09 20:00:00 old_std 9 11 benzene_area 684166 2
#4 2018-11-09 23:00:00 old_std 9 11 benzene_area 589498 2
#5 2018-11-10 02:00:00 old_std 10 11 benzene_area 460714 2
#6 2018-11-10 05:00:00 old_std 10 11 benzene_area 490663 2
#7 2018-11-10 11:30:00 old_std 10 11 benzene_area 404947 3
#8 2018-11-10 14:30:00 old_std 10 11 benzene_area 402566 3
#9 2018-11-10 16:30:00 old_std 10 11 benzene_area 362376 3
#10 2018-11-11 00:00:00 old_std 11 11 benzene_area 276184 4
기본 R에서는 다음과 같습니다.
df$group <- cumsum(c(TRUE, difftime(df$time[-1], df$time[-nrow(df)],
units = "hours") > 3))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다