Angenommen, ich habe zwei Datenrahmen,findet die kürzeste Zeitdifferenz zwischen zwei Datenrahmen
df1
id time1
1 2016-04-07 21:39:10
1 2016-04-05 11:19:17
2 2016-04-03 10:58:25
2 2016-04-02 21:39:10
df2
id time2
1 2016-04-07 21:39:11
1 2016-04-05 11:19:18
1 2016-04-06 21:39:11
1 2016-04-04 11:19:18
2 2016-04-03 10:58:26
2 2016-04-02 21:39:11
2 2016-04-04 10:58:26
2 2016-04-05 21:39:11
ich für jeden Eintrag in df1 finden will, die kürzeste Zeitdifferenz in df2. Angenommen, wir nehmen den ersten Eintrag, es hat id1, also möchte ich df2 durchlaufen, nach id 1 filtern, dann den Zeitunterschied zwischen einem Eintrag von df1 und den restlichen Einträgen von df2 prüfen und die kürzeste Differenz finden und den entsprechenden Eintrag holen . Meine Beispielausgabe soll
id time time2 diff(in secs)
1 2016-04-07 21:39:10 2016-04-07 21:39:10 1
1 2016-04-05 11:19:17 2016-04-05 11:19:17 1
2 2016-04-03 10:58:25 2016-04-03 10:58:25 1
2 2016-04-02 21:39:10 2016-04-02 21:39:10 1
folgende ist mein Versuch,
for(i in unique(df1$id)){
temp1 = df1[df1$id == i,]
temp2 = df2[df2$id == i,]
for(j in unique(df1$time1){
for(k in unique(df2$time2){
diff = abs(df1$time1[j] - df2$time2[k]
print(diff)}}}
Ich bin nicht in der Lage, nachdem diese Fortschritte, viele Fehler zu bekommen. Kann mir jemand helfen, das zu korrigieren? Kann ein besserer Weg vorgeschlagen werden, dies zu tun? Jede Hilfe wäre willkommen.
Update:
Reproduzierbare Daten:
df1 <- data.frame(
id = c(1,1,2,2),
time1 = c('2016-04-07 21:39:10', '2016-04-05 11:19:17', '2016-04-03 10:58:25', '2016-04-02 21:39:10')
)
df2 <- data.frame(
id = c(1,1,1,1,2,2,2,2),
time2 = c('2016-04-07 21:39:11', '2016-04-05 11:19:18','2016-04-07 21:39:11', '2016-04-05 11:19:18', '2016-04-03 10:58:26', '2016-04-02 21:39:11','2016-04-03 10:58:26', '2016-04-02 21:39:11')
)
df1$time1 = as.POSIXct(df1$time1)
df2$time2 = as.POSIXct(df2$time2)
Können Sie bitte den Code hinzufügen zu erzeugen 'df1' und' df2' – Divi
tun, um die 'ID's Materie überhaupt? ? klingt wie der kürzeste Unterschied innerhalb 'id' – jaimedash
@jaimedash ja zusammen mit den entsprechenden Zeiten – haimen