2017-01-02 4 views
2

Wir wünschen allen ein frohes neues Jahr.Schnelle Datenpopulation basierend auf dem Zeitstempel in R

kommend zu meiner Frage:

Ich habe zwei Datensätze.

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 

und 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 

Nun möchte ich eine New Spalte in Dataset 1 schaffen, die Werte von Value2 von Dataset2 basierend auf Bedingung Dataset2$Time2 > Dataset1$Time für jede Zeile von bevöl Dataset 1.

Unten ist die Probe output:

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 

gleicher Wert aus Spalte Value2 in verschiedenen Reihen von Dataset1 auf passende Bedingung basierend bevölkern können.

Soln. Ich habe versucht:

Ich habe versucht mit einfachen for Schleife [1: nrow(Dataset1)] mit jeder Zeile von Dataset2 übereinstimmen. Aber ich habe einen großen Datensatz, der viel Zeit in Anspruch nimmt. Ich bin auf der Suche nach viel schneller Weg - die Verwendung von for Schleife überspringen können.

Jede Hilfe/Anregung wäre willkommen.

+0

Wir 'data.table' dh' setDT (df1 verwenden können) [df2, Wert: = Wert2, an =. (Name, Zeit2> Zeit1)] ' – akrun

+0

sagen, wenn ich eine andere gemeinsame Spalte namens' Zone' habe. kann ich so schreiben für die 'on' Bedingung:' on =. (Name, Zone, Time2> Time1) ' – Zico

+0

ja, du kannst das tun – akrun

Antwort

1

Eine mögliche Option ist findInterval von base R

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

HINWEIS: wir, dass die 'Zeit' annehmen 'Time2' sind POSIXct Klasse

+1

'Zeitstempel' müssen vor dem 'findInterval' sortiert werden. funktioniert gut. Gr8 Lösung in der Tat. Vielen Dank. – Zico

Verwandte Themen