2017-06-09 3 views
0

Ich bin neu praktizierender R und jetzt kann ich mit Problemen für viele Tage nicht weitermachen. Ich wählte meine aufgezeichneten Daten zu analysieren. Die Daten werden stündlich von 2 Beispielgeräten aufgezeichnet und es gibt ein kleines Verzögerungsproblem zwischen Aufzeichnungsgeräten und Datenbankservern, so dass einige Stunden die Daten in Sekundenschnelle aufgezeichnet werden können (+ -5 oder sich sehr unstabil verändern). Sie können deutlich in Beispieldaten sehen.R: Wie kann ich diese beiden Datenrahmen zu einer Datenrahmen nach Datum Spalte kombinieren?

Große Probleme sind

1) Es gibt einige Zeilen aus Spalte Datum sind in Sekunden Teil nicht gleich.

2) Es gibt einige Zeilen von Datum fehlen Zeilen Ich fand eine fehlende Zeile von df2 'um Stunde 13' nachdem ich Beispieldaten nach Kopf (df1,24)/Kopf (df2,24) ausgewählt hatte und die Ergebnisse wie hierunter. Wenn es 10000 ausgewählte Zeilen gibt, wird das ein großes Problem mit vielen fehlenden Werten.

> class(df1$Date) 
[1] "POSIXct" "POSIXt" 

df1

> df1 
        Date Val Weekday 
1 2017-06-08 13:00:04 520 Thursday 
2 2017-06-08 12:00:04 507 Thursday 
3 2017-06-08 11:00:04 501 Thursday 
4 2017-06-08 10:00:04 472 Thursday 
5 2017-06-08 09:00:04 444 Thursday 
6 2017-06-08 08:00:04 446 Thursday 
7 2017-06-08 07:00:04 444 Thursday 
8 2017-06-08 06:00:04 441 Thursday 
9 2017-06-08 05:00:04 439 Thursday 
10 2017-06-08 04:00:04 442 Thursday 
11 2017-06-08 03:00:04 440 Thursday 
12 2017-06-08 02:00:04 443 Thursday 
13 2017-06-08 01:00:04 445 Thursday 
14 2017-06-08 00:00:04 445 Thursday 
15 2017-06-07 23:00:04 446 Wednesday 
16 2017-06-07 22:00:04 445 Wednesday 
17 2017-06-07 21:00:04 447 Wednesday 
18 2017-06-07 20:00:04 445 Wednesday 
19 2017-06-07 19:00:04 451 Wednesday 
20 2017-06-07 18:00:04 469 Wednesday 
21 2017-06-07 17:00:04 473 Wednesday 
22 2017-06-07 16:00:04 510 Wednesday 
23 2017-06-07 15:00:04 517 Wednesday 
24 2017-06-07 14:00:04 524 Wednesday 

df2

> df2 
        Date df1.Val Weekday 
1 2017-06-08 12:00:04 507 Thursday 
2 2017-06-08 11:00:04 501 Thursday 
3 2017-06-08 10:00:04 472 Thursday 
4 2017-06-08 09:00:04 444 Thursday 
5 2017-06-08 08:00:04 446 Thursday 
6 2017-06-08 07:00:04 444 Thursday 
7 2017-06-08 06:00:04 441 Thursday 
8 2017-06-08 05:00:04 439 Thursday 
9 2017-06-08 04:00:04 442 Thursday 
10 2017-06-08 03:00:04 440 Thursday 
11 2017-06-08 02:00:04 443 Thursday 
12 2017-06-08 01:00:04 445 Thursday 
13 2017-06-08 00:00:04 445 Thursday 
14 2017-06-07 23:00:04 446 Wednesday 
15 2017-06-07 22:00:04 445 Wednesday 
16 2017-06-07 21:00:04 447 Wednesday 
17 2017-06-07 20:00:04 445 Wednesday 
18 2017-06-07 19:00:04 451 Wednesday 
19 2017-06-07 18:00:04 469 Wednesday 
20 2017-06-07 17:00:04 473 Wednesday 
21 2017-06-07 16:00:03 510 Wednesday 
22 2017-06-07 15:00:03 517 Wednesday 
23 2017-06-07 14:00:03 524 Wednesday 
24 2017-06-07 13:00:03 489 Wednesday 

So, wie Daten zur Vorbereitung zum Kombinieren der Datenrahmen zu können?

Ich möchte die Ausgabe wie in diesem Beispiel sein:

    Date df1.Val df2.Val Weekday 
    2017-06-08 13:00:04 520    Thursday 
    2017-06-08 12:00:00 507  507  Thursday 
    2017-06-08 11:00:00 501  501  Thursday 
    2017-06-08 10:00:00 472  472  Thursday 
    2017-06-08 09:00:00 444  444  Thursday 
    2017-06-08 08:00:00 446  446  Thursday 
    2017-06-08 07:00:00 444  444  Thursday 
    2017-06-08 06:00:00 441  441  Thursday 
    2017-06-08 05:00:00 439  439  Thursday 
    2017-06-08 04:00:00 442  442  Thursday 
    2017-06-08 03:00:00 440  440  Thursday 
    2017-06-08 02:00:00 443  443  Thursday 
    2017-06-08 01:00:00 445  445  Thursday 
    2017-06-08 00:00:00 445  445  Thursday 
    2017-06-07 23:00:00 446  446  Wednesday 
    2017-06-07 22:00:00 445  445  Wednesday 
    2017-06-07 21:00:00 447  447  Wednesday 
    2017-06-07 20:00:00 445  445  Wednesday 
    2017-06-07 19:00:00 451  451  Wednesday 
    2017-06-07 18:00:00 469  469  Wednesday 
    2017-06-07 17:00:00 473  473  Wednesday 
    2017-06-07 16:00:00 510  510  Wednesday 
    2017-06-07 15:00:00 517  517  Wednesday 
    2017-06-07 14:00:00 524  524  Wednesday 
    2017-06-07 13:00:00   489  Wednesday 

aber diese Val sind die gleichen, da die Geräte val aus der gleichen Quelle, wenn sie aus verschiedenen Quellen sind davon ausgehen, es geht zu sein wie folgt:

    Date df1.Val df3.Val Weekday 
    2017-06-08 13:00:04 520  550  Thursday 
    2017-06-08 12:00:00 507  515  Thursday 
    2017-06-08 11:00:00 501  496  Thursday 

Bitte helfen. Ich danke dir sehr.

Antwort

0

Dies sollte jetzt funktionieren. Ein Vorbehalt, der neue Datenrahmen wird automatisch sortiert:

Date = c("2017-06-08 13:00:04", "2017-06-08 12:00:04", "2017-06-08 11:00:04", 
     "2017-06-08 10:00:04", "2017-06-08 09:00:04") 
Val = c("520", "507", "501", "472", "444") 
Weekday = c("Thursday", "Thursday", "Thursday", "Thursday", "Thursday") 

df1 = as.data.frame(cbind(Date, Val, Weekday)) 
df1$Date = as.POSIXct(df1$Date) 
df1$Val = as.numeric(as.character(df1$Val)) 


Date1 = c("2017-06-08 12:00:04", "2017-06-08 11:00:04", 
     "2017-06-08 10:00:04", "2017-06-08 09:00:04", "2017-06-08 09:00:03") 
Val1 = c("507", "501", "472", "444", "446") 
Weekday1 = c("Thursday", "Thursday", "Thursday", "Thursday", "Thursday") 

df2 = as.data.frame(cbind(Date1, Val1, Weekday1)) 
df2$Date1 = as.POSIXct(df2$Date1) 
df2$Val1 = as.numeric(as.character(df2$Val1)) 

colnames(df2)[1] = "Date" 
colnames(df2)[2] = "Val" 
colnames(df2)[3] = "Weekday" 

df1$Date = align.time(df1$Date, n = 60) 
df2$Date = align.time(df2$Date, n = 60) 

ndf = merge(df1, df2, by = c("Date", "Weekday"), all = TRUE, sort = TRUE) 
ndf 
+0

Können Sie den bearbeiteten Code versuchen? – AK88

+0

Sorry, es funktioniert nicht. Die Ausgabe ist Durchschnittswert von 2 df aber Datum wurde nur von df1 gewählt Ich denke, dass aufgrund der verschiedenen Sekunden und Zeilen Datum von df. bearbeitet: \t Ich werde versuchen, aber welches Paket es ist? –

+0

Ich habe Schwierigkeiten, den Gesamtumfang Ihrer Aufgabe zu verstehen. Können Sie Ihren Standpunkt bezüglich der durchschnittlichen Outputs klären? Das Paket ist "xts". – AK88

Verwandte Themen