data <- read.table(text=
"ID1 ID2 From To
12 127 20090701 20090703
12 127 20090704 20090711
12 127 20090707 20100831
12 127 20100901 99991231
18 880 19740401 20091129
18 880 20100608 99991231
12 127 20080102 20080305
12 127 20080306 20080329
12 128 20080620 20090204"
, header=T)
Ich mag den oben Datenrahmen in das folgende Formular verwandeln:Wie aggregiert Zeiträume gruppiert nach Identifikatoren?
result <- read.table(text=
"ID1 ID2 From To
12 127 20080102 20080329
12 127 20090701 99991231
12 128 20080620 20090204
18 880 19740401 20091129
18 880 20100608 99991231"
, header=T)
Die tranformation in wenigen Worten zu einer Gruppe von ID1, ID2 und dem einzigartigen Zeitraum, in dem das Subjekt ständig aktiv war (nicht ein einziger Tag Pause). Das bedeutet, dass die mehreren Zeilen in Fällen fallen, in denen sie nicht benötigt werden (eine durchgehende Aktivitätsperiode von Datum 1 bis Datum 2).
Auf die Lösung wird hingewiesen.
Für den Anfang konvertieren die Termine:
df$From <- as.Date(as.character(df$From), format = "%Y%m%d")
df$To <- as.Date(as.character(df$To), format = "%Y%m%d")
Zunächst sollten Sie die Spalte 'Von' und' To' wie folgt umwandeln: 'df $ From <- as.Date (as.character (df $ Von), format ="% Y% m% d ")' Damit können Sie prüfen, ob zwei Tage aufeinanderfolgende Tage sind. – Marcel10
definitiv, Zeichenfolge muss in Daten umgewandelt werden, danke für das Hinzeigen. Ich dachte über eine dplyr Lösung wie df%>% group_by (ID1, ID2)%>% muate (Funktion1, um das Datum von ab zu bekommen)%>% muate (Funktion2, um das Datum zu erhalten) ... wo die Funktionen sein könnten a für i loop oder etwas ähnliches ich denke –
Klingt wie ein vernünftiger Ansatz. Viel Glück! – Marcel10