시계열의 중단을 식별하고 R의 각 중단에 대해 고유 한 요인을 할당합니다.

user2175481

수백 척의 선박에 대한 선박 추적 시계열 데이터의 큰 df가 있습니다. 시계열은 여러 해에 걸쳐 있으므로 각 선박에는 여러 트랙이 있습니다. 각 '트랙'은 시간별 데이터이며, 선박 당 각 개별 트랙을 식별하는 데 사용하고자하는 시계열에는 큰 간격 (> 일)이 ​​있습니다.

내 계획은 루프를 사용하여 먼저 선박과 전체 시계열을 선택한 다음 선박별로 고유 한 트랙을 식별 한 다음 선택한 선박별로 개별 트랙을 분할 (목록으로) 한 다음 몇 가지 수학, 분할 해제 및 추가 모든 선박의 새로운 데이터 프레임. split ()에 대해 식별 된 각 트랙에 고유 한 요소를 부여하는 방법을 알아낼 수 없습니다. 일부 단순화 된 데이터는 다음과 같습니다.

vessel<-c(rep("A",11))
time <- as.POSIXct(c("2017-01-01 00:02:25 GMT", "2017-01-01 01:31:26 GMT", "2017-01-01 02:37:42 GMT",
                     "2017-01-01 03:14:34 GMT", "2017-01-01 04:09:45 GMT", "2017-02-01 05:51:53 GMT",
                     "2017-03-01 06:22:24 GMT", "2017-03-01 07:34:44 GMT","2017-03-01 08:01:15 GMT",
                     "2017-03-01 09:16:44 GMT", "2017-03-01 10:48:12 GMT")) 

df<-data.frame(vessel,time)

트랙의 일부가 아닌 단일 시간 (6 행)을 추가했음을 알 수 있습니다. 데이터는 트랙의 일부가 아닌 이러한 단일 핑으로 가득 차 있습니다. 나는 또한 그러한 사건을 처리하는 방법을 알고 싶습니다. 지금까지 다른 게시물에서 선택한 코드는 다음과 같습니다.

df$gap <- c(0, with(df, time[-1] - time[-nrow(df)]))/60 # results in hours between rows
gap_threshold <- 10 # anything greater that 10 hours difference I treat as a different track
df$over_thresh <- df$gap < gap_threshold
df

이것은 휴식이 어디에 있는지 식별하지만 사용할 수있는 각 휴식에 고유 한 요소를 어떻게 할당 split(df, df$split_factor)합니까? 이상적으로 최종 df는 다음과 같아야하지만 'split_factor'열을 만드는 방법을 모르겠습니까?

vessel                time         gap       over_thresh  split_factor
1       A 2017-01-01 00:02:25   0.0000000        TRUE      split_1
2       A 2017-01-01 01:31:26   1.4836111        TRUE      split_1
3       A 2017-01-01 02:37:42   1.1044444        TRUE      split_1
4       A 2017-01-01 03:14:34   0.6144444        TRUE      split_1
5       A 2017-01-01 04:09:45   0.9197222        TRUE      split_1
6       A 2017-02-01 05:51:53 745.7022222       FALSE       delete
7       A 2017-03-01 06:22:24 672.5086111       FALSE      split_2
8       A 2017-03-01 07:34:44   1.2055556        TRUE      split_2
9       A 2017-03-01 08:01:15   0.4419444        TRUE      split_2
10      A 2017-03-01 09:16:44   1.2580556        TRUE      split_2
11      A 2017-03-01 10:48:12   1.5244444        TRUE      split_2
> 

두 번째 트랙은 7 행에서 시작하지만 이전 행과의 시간 차이로 인해 FALSE로 식별되었습니다. 그러나 다음 트랙의 일부로 레이블을 지정해야합니다.

또한 이것은 모두 공간 데이터 프레임으로 수행되고 있으므로 이것이 수행 될 수 있다고 가정하지만 잘못되었을 수 있습니다. 데이터를 추출하고 공간 데이터 프레임을 다시 만들 수 있습니다. 문제 없습니다. 감사.

Akrun

여기에 data.table. rleid'vessel'로 그룹화 된 'over_thresh' 기반으로 그룹화 인덱스를 만든 다음 'delete'문자열이있는 열로 'split_factor'를 만듭니다. 'vessel', 'grp'로 그룹화 된 'over_thresh'에 요소가있는 .I의 색인 ( )을 any TRUE가져오고,에서 사용하고 i, 그룹 색인 ( .GRP)을 가져오고, 하위 문자열 split붙여 넣어 i'split_factor' 대한 행 요소를 할당합니다.

library(data.table)
setDT(df)[, grp := rleid(over_thresh|shift(over_thresh, type = 'lead')), vessel]
df[, split_factor := 'delete']
i1 <- df[, .I[any(over_thresh)], .(vessel, grp)]$V1
df[i1, split_factor := paste0('split_', .GRP), .(vessel, grp)][, grp := NULL][]
#     vessel                time         gap over_thresh split_factor
# 1:      A 2017-01-01 00:02:25   0.0000000        TRUE      split_1
# 2:      A 2017-01-01 01:31:26   1.4836111        TRUE      split_1
# 3:      A 2017-01-01 02:37:42   1.1044444        TRUE      split_1
# 4:      A 2017-01-01 03:14:34   0.6144444        TRUE      split_1
# 5:      A 2017-01-01 04:09:45   0.9197222        TRUE      split_1
# 6:      A 2017-02-01 05:51:53 745.7022222       FALSE       delete
# 7:      A 2017-03-01 06:22:24 672.5086111       FALSE      split_2
# 8:      A 2017-03-01 07:34:44   1.2055556        TRUE      split_2
# 9:      A 2017-03-01 08:01:15   0.4419444        TRUE      split_2
#10:      A 2017-03-01 09:16:44   1.2580556        TRUE      split_2
#11:      A 2017-03-01 10:48:12   1.5244444        TRUE      split_2

또는 dplyrand를 사용하여 rle'vessel'별로 그룹화 한 후 rle'over_thresh '에서를 사용하거나 ( |) of lead을 반환하는 'over_thresh' (즉, 다음 값)을 사용 합니다. 이제 TRUE 인 값을 'split_', 'value'시퀀스로 할당 한 다음 '삭제'할 값을 변경하여 '값'(즉)을 조작 합니다.listlengthsvalueslogicalFALSE

library(dplyr)
library(stringr)
df %>% 
     group_by(vessel) %>% 
     mutate(split_factor = inverse.rle(within.list(rle(over_thresh|
            lead(over_thresh)),
          values[values] <- str_c('split_', seq_along(values[values])))), 
          split_factor = replace(split_factor, 
             !as.logical(split_factor), 'delete'))
# A tibble: 11 x 5
# Groups:   vessel [1]
#   vessel time                    gap over_thresh split_factor
#   <chr>  <dttm>                <dbl> <lgl>       <chr>       
# 1 A      2017-01-01 00:02:25   0     TRUE        split_1     
# 2 A      2017-01-01 01:31:26   1.48  TRUE        split_1     
# 3 A      2017-01-01 02:37:42   1.10  TRUE        split_1     
# 4 A      2017-01-01 03:14:34   0.614 TRUE        split_1     
# 5 A      2017-01-01 04:09:45   0.920 TRUE        split_1     
# 6 A      2017-02-01 05:51:53 746.    FALSE       delete      
# 7 A      2017-03-01 06:22:24 673.    FALSE       split_2     
# 8 A      2017-03-01 07:34:44   1.21  TRUE        split_2     
# 9 A      2017-03-01 08:01:15   0.442 TRUE        split_2     
#10 A      2017-03-01 09:16:44   1.26  TRUE        split_2     
#11 A      2017-03-01 10:48:12   1.52  TRUE        split_2 

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

중복 키의 값을 단순하고 단일 배열로 합하고 해당 키를 PHP에서 한 번만 표시합니다.

분류에서Dev

인덱스별로 중복을 삭제하고 중복에서 각 열의 최대 값을 유지합니다.

분류에서Dev

R은 조건을 충족하는 각 열에 대해 고유 한 행을 계산하고 나열합니다.

분류에서Dev

angular2에서 다단계 양식의 각 단계에 대한 고유 URL

분류에서Dev

파일을 열고 각 줄을 목록으로 분할 한 다음 각 줄의 각 단어에 대해 단어가 목록에 있는지 확인하고 목록에 추가하지 않았는지 확인합니다.

분류에서Dev

MS Excel에서 다른 열의 각 고유 값에 대해 한 열의 고유 값을 계산하는 방법은 무엇입니까?

분류에서Dev

열의 각 고유 값에 대해 라인을 추출하고 별도로 저장하십시오.

분류에서Dev

`npm install @ babel / cli`는 4 개의 모듈에 대해 "WARN deprecated"라고 말합니다. 이러한 지원 중단을 어떻게 해결할 수 있습니까?

분류에서Dev

배열의 각 요소에 대한 파일을 열고 정규식 Perl을 확인하십시오.

분류에서Dev

pandas DataFrame-각 색인 레이블을 하드 코딩하지 않고 각 고유 색인에 대한 열의 평균을 계산합니까?

분류에서Dev

R을 사용하여 각각의 고유 한 범주에 대해 새 열에 범주 형 데이터 프레임 배치를 재구성합니다.

분류에서Dev

Spanner의 고유 색인에 대한 핫스팟을 고려해야할까요?

분류에서Dev

기본 유형과의 상호 작용 및 다른 유형에 대한 구성원 액세스를 중단하지 않고 프록시 패턴을 사용할 때 읽기와 쓰기를 어떻게 구별합니까?

분류에서Dev

Excel : A 열에 중복 이름, B 열에 고유 데이터. 여러 열이있는 각 고유 이름에 대해 하나의 행을 원합니다.

분류에서Dev

동일한 인덱스, 동일한 열 (단, 각 DataFrame에 고유 한 몇 개의 열)이있는 DataFrame을 반복하고 병합합니다.

분류에서Dev

SQL 각 그룹의 값을 계산하고 단일 열의 각 값에 대한 최대 개수 검색

분류에서Dev

특정 열> 2 개 파일에서 공통 요소를 찾고 각각의 해당 줄을 인쇄합니다.

분류에서Dev

단일 행을 여러 행으로 분할하는 방법, 각 행에는 Excel 표의 서로 다른 열에 대한 고유 한 셀 값이 있습니다.

분류에서Dev

각 요인 그룹에 대해 ggplot에 별도의 vline을 추가합니다 (변수 중요도 랜덤 포레스트에 대한 점도).

분류에서Dev

한 계열을 다른 계열에 할당하거나 인덱스가 교차하지 않는 병합하고 흥미로운 지수에 대한 계열 중 하나의 값을 유지하는 방법

분류에서Dev

JPA-SINGLE_TABLE 계층 추상 클래스의 두 하위 클래스에 대해 서로 다른 고유 제한을 할당합니다.

분류에서Dev

python-열에서 중복을 찾고 해당 중복에 대한 다른 열의 값을 바꿉니다.

분류에서Dev

"a = (*)"가 각 단어 대신 '*'의 각 파일 이름에 대해 하나의 요소가있는 배열을 할당하는 이유는 무엇입니까?

분류에서Dev

다중 열 조합에 대한 테이블에서 중복 레코드를 가져오고 중복에 대해 'Y'를 표시하고 단일 레코드에 대해 'N'을 표시합니다.

분류에서Dev

다중 열 조합에 대한 테이블에서 중복 레코드를 가져오고 중복에 대해 'Y'를 표시하고 단일 레코드에 대해 'N'을 표시합니다.

분류에서Dev

열의 고유 한 값에 대해 계산을 반복 할 수 있습니까?

분류에서Dev

실행중인 배치 파일을 중단하고 해당 환경에서 명령을 실행 한 다음 계속하는 방법은 무엇입니까?

분류에서Dev

두 필드에 대한 MySQL 고유 인덱스, 성능 향상을 위해 해당 집합의 단일 필드에 별도의 인덱스가 필요합니까?

분류에서Dev

동일한 비공개 구현을 공유하는 별도의 메서드에 대해 중복 단위 테스트가 있어야합니까?

Related 관련 기사

  1. 1

    중복 키의 값을 단순하고 단일 배열로 합하고 해당 키를 PHP에서 한 번만 표시합니다.

  2. 2

    인덱스별로 중복을 삭제하고 중복에서 각 열의 최대 값을 유지합니다.

  3. 3

    R은 조건을 충족하는 각 열에 대해 고유 한 행을 계산하고 나열합니다.

  4. 4

    angular2에서 다단계 양식의 각 단계에 대한 고유 URL

  5. 5

    파일을 열고 각 줄을 목록으로 분할 한 다음 각 줄의 각 단어에 대해 단어가 목록에 있는지 확인하고 목록에 추가하지 않았는지 확인합니다.

  6. 6

    MS Excel에서 다른 열의 각 고유 값에 대해 한 열의 고유 값을 계산하는 방법은 무엇입니까?

  7. 7

    열의 각 고유 값에 대해 라인을 추출하고 별도로 저장하십시오.

  8. 8

    `npm install @ babel / cli`는 4 개의 모듈에 대해 "WARN deprecated"라고 말합니다. 이러한 지원 중단을 어떻게 해결할 수 있습니까?

  9. 9

    배열의 각 요소에 대한 파일을 열고 정규식 Perl을 확인하십시오.

  10. 10

    pandas DataFrame-각 색인 레이블을 하드 코딩하지 않고 각 고유 색인에 대한 열의 평균을 계산합니까?

  11. 11

    R을 사용하여 각각의 고유 한 범주에 대해 새 열에 범주 형 데이터 프레임 배치를 재구성합니다.

  12. 12

    Spanner의 고유 색인에 대한 핫스팟을 고려해야할까요?

  13. 13

    기본 유형과의 상호 작용 및 다른 유형에 대한 구성원 액세스를 중단하지 않고 프록시 패턴을 사용할 때 읽기와 쓰기를 어떻게 구별합니까?

  14. 14

    Excel : A 열에 중복 이름, B 열에 고유 데이터. 여러 열이있는 각 고유 이름에 대해 하나의 행을 원합니다.

  15. 15

    동일한 인덱스, 동일한 열 (단, 각 DataFrame에 고유 한 몇 개의 열)이있는 DataFrame을 반복하고 병합합니다.

  16. 16

    SQL 각 그룹의 값을 계산하고 단일 열의 각 값에 대한 최대 개수 검색

  17. 17

    특정 열> 2 개 파일에서 공통 요소를 찾고 각각의 해당 줄을 인쇄합니다.

  18. 18

    단일 행을 여러 행으로 분할하는 방법, 각 행에는 Excel 표의 서로 다른 열에 대한 고유 한 셀 값이 있습니다.

  19. 19

    각 요인 그룹에 대해 ggplot에 별도의 vline을 추가합니다 (변수 중요도 랜덤 포레스트에 대한 점도).

  20. 20

    한 계열을 다른 계열에 할당하거나 인덱스가 교차하지 않는 병합하고 흥미로운 지수에 대한 계열 중 하나의 값을 유지하는 방법

  21. 21

    JPA-SINGLE_TABLE 계층 추상 클래스의 두 하위 클래스에 대해 서로 다른 고유 제한을 할당합니다.

  22. 22

    python-열에서 중복을 찾고 해당 중복에 대한 다른 열의 값을 바꿉니다.

  23. 23

    "a = (*)"가 각 단어 대신 '*'의 각 파일 이름에 대해 하나의 요소가있는 배열을 할당하는 이유는 무엇입니까?

  24. 24

    다중 열 조합에 대한 테이블에서 중복 레코드를 가져오고 중복에 대해 'Y'를 표시하고 단일 레코드에 대해 'N'을 표시합니다.

  25. 25

    다중 열 조합에 대한 테이블에서 중복 레코드를 가져오고 중복에 대해 'Y'를 표시하고 단일 레코드에 대해 'N'을 표시합니다.

  26. 26

    열의 고유 한 값에 대해 계산을 반복 할 수 있습니까?

  27. 27

    실행중인 배치 파일을 중단하고 해당 환경에서 명령을 실행 한 다음 계속하는 방법은 무엇입니까?

  28. 28

    두 필드에 대한 MySQL 고유 인덱스, 성능 향상을 위해 해당 집합의 단일 필드에 별도의 인덱스가 필요합니까?

  29. 29

    동일한 비공개 구현을 공유하는 별도의 메서드에 대해 중복 단위 테스트가 있어야합니까?

뜨겁다태그

보관