2017-01-02 2 views
2

입니다. 새해 복 많이 받으시기 바랍니다..타임 스탬프를 기반으로 한 빠른 데이터 모집은 R

내 질문에 오는 :

나는 두 개의 데이터 집합을 가지고있다.

Dataset 1 :

Time   Name   Value 
    6/1/2016 9:39 ABCD IS Equity 11.01 
    6/1/2016 9:44 ABCD IS Equity 11.05 
    6/1/2016 9:46 ABCD IS Equity 11.01 
    6/1/2016 9:58 ABCD IS Equity 11.01 
    6/1/2016 10:10 ABCD IS Equity 11.01 
    6/1/2016 10:13 ABCD IS Equity 11.01 
    6/1/2016 10:33 ABCD IS Equity 11.02 
    6/1/2016 10:42 ABCD IS Equity 11.02 
    6/1/2016 10:52 ABCD IS Equity 11.02 
    6/1/2016 10:56 ABCD IS Equity 11.06 
    6/1/2016 11:14 ABCD IS Equity 11.02 
    6/1/2016 11:25 ABCD IS Equity 11.03 
    6/1/2016 11:26 ABCD IS Equity 11.03 
    6/1/2016 11:29 ABCD IS Equity 11.03 
    6/1/2016 11:30 ABCD IS Equity 11.03 
    6/1/2016 11:40 ABCD IS Equity 11.03 
    6/1/2016 11:40 ABCD IS Equity 11.01 
    6/1/2016 11:44 ABCD IS Equity 11.01 
    6/1/2016 12:04 ABCD IS Equity 11.01 

Dataset 2 :

Time2   Name2   Value2 
6/1/2016 9:42 ABCD IS Equity 123 
6/1/2016 9:45 ABCD IS Equity 124 
6/1/2016 9:45 ABCD IS Equity 125 
6/1/2016 10:00 ABCD IS Equity 126 
6/1/2016 10:14 ABCD IS Equity 127 
6/1/2016 10:14 ABCD IS Equity 128 
6/1/2016 10:14 ABCD IS Equity 129 
6/1/2016 10:41 ABCD IS Equity 130 
6/1/2016 10:45 ABCD IS Equity 131 
6/1/2016 10:56 ABCD IS Equity 132 
6/1/2016 10:58 ABCD IS Equity 133 
6/1/2016 11:26 ABCD IS Equity 134 
6/1/2016 11:27 ABCD IS Equity 135 
6/1/2016 11:30 ABCD IS Equity 136 
6/1/2016 11:32 ABCD IS Equity 137 
6/1/2016 11:40 ABCD IS Equity 138 
6/1/2016 11:42 ABCD IS Equity 139 
6/1/2016 11:45 ABCD IS Equity 140 
6/1/2016 12:05 ABCD IS Equity 141 

지금, 나는의 각 행에 대해 조건 Dataset2$Time2 > Dataset1$Time에 따라 Dataset2Value2에서 값을 채 웁니다 Dataset 1에서 New 열을 만들려면 Dataset 1. 열 Value2에서

Time   Name   Value New 
6/1/2016 9:39 ABCD IS Equity 11.01 123 
6/1/2016 9:44 ABCD IS Equity 11.05 124 
6/1/2016 9:46 ABCD IS Equity 11.01 126 
6/1/2016 9:58 ABCD IS Equity 11.01 126 
6/1/2016 10:10 ABCD IS Equity 11.01 127 
6/1/2016 10:13 ABCD IS Equity 11.01 127 
6/1/2016 10:33 ABCD IS Equity 11.02 130 
6/1/2016 10:42 ABCD IS Equity 11.02 131 
6/1/2016 10:52 ABCD IS Equity 11.02 132 
6/1/2016 10:56 ABCD IS Equity 11.06 133 
6/1/2016 11:14 ABCD IS Equity 11.02 134 
6/1/2016 11:25 ABCD IS Equity 11.03 134 
6/1/2016 11:26 ABCD IS Equity 11.03 135 
6/1/2016 11:29 ABCD IS Equity 11.03 136 
6/1/2016 11:30 ABCD IS Equity 11.03 137 
6/1/2016 11:40 ABCD IS Equity 11.03 139 
6/1/2016 11:40 ABCD IS Equity 11.01 139 
6/1/2016 11:44 ABCD IS Equity 11.01 140 
6/1/2016 12:04 ABCD IS Equity 11.01 141 

동일한 값 조건에 일치에 기초 Dataset1 다른 행에 채울 수

아래는 샘플 output이다.

Soln. 나는 시도했다 :

나는 시도 Dataset2의 각 행과 일치하는 간단한 for 루프 [1: nrow(Dataset1)]을 사용. 하지만 상당한 시간이 걸리는 대규모 데이터 세트가 있습니다. 나는 훨씬 더 빠른 방법을 찾고 있는데 - 이것은 for loop의 사용을 건너 뛸 수있다.

도움이나 제안을 보내 주시면 감사하겠습니다.

+0

우리가 사용할 수있는'data.table' 즉'setDT (DF1 있습니다) [df2, Value : = Value2, on =. (Name, Time2> Time1)] ' – akrun

+0

'Zone'이라는 이름의 또 다른 공통 열이 있다고 해봅시다. 'on =. (Name, Zone, Time2> Time1)' – Zico

+0

예, 할 수 있습니다. – akrun

답변

1

가능한 옵션은 findInterval

df2$New <- df2$Value2[findInterval(df1$Time, df2$Time2)+1] 

base R에서 주 : 우리는 '시간'가정 '타임 2는'POSIXct 클래스

+1

'findInterval'을 적용하기 전에'timestamp'를 정렬해야합니다. 잘 작동합니다. 참으로 gr8 솔루션. 감사. – Zico

관련 문제