2017-11-10 2 views
0

In einem R data.frame würde ich das fehlende Jahr für Gruppe finden und eine Zeile für jedes fehlende Jahr hinzufügen und den letzten Wert wiederholen.Zeilen für fehlendes Jahr nach Gruppe hinzufügen

Ein Beispiel

Dies ist ein data.frame

1. GROUP/YEAR1/YEAR2/YEAR3 
2. A/100/190/na 
3. A/90/na/300 
4. B/200/70/na 

I

1. GROUP/YEAR1/YEAR2/YEAR3 
    2. A/100/190/190 
    3. A/90/90/300 
    4. B/200/70/70 
+1

Hier ist [Wie ein großes R reproduzierbaren Exempel statuieren?] (Http://stackoverflow.com/questions/5963269) – Sotos

Antwort

1

möchten, können Sie complete von tidyr verwenden, um die Sequenz zu vervollständigen, und dann fill die NAs pro Gruppe zu füllen , dh

library(tidyverse) 

df %>% 
complete(YEAR, GROUP) %>% 
group_by(GROUP) %>% 
fill(VALUE) 

, die

# A tibble: 4 x 3 
# Groups: GROUP [2] 
    YEAR GROUP VALUE 
    <int> <fctr> <int> 
1 2000  A 190 
2 2001  A 200 
3 2000  B 70 
4 2001  B 70 

EDIT

Wie pro Ihre neuen Anforderungen gibt, scheint es, als ob Sie nur NAs zeilenweise füllen müssen. In diesem Fall könnte eine einfache Basis R-Lösung seine

as.data.frame(t(apply(df, 1, function(i) zoo::na.locf(i)))) 
+0

es nicht hier setzen. Edit es in Ihrer Frage – Sotos

+0

Hallo Sotos, entschuldigen Sie mich, aber ich ändere meine Frage. Ich weiß nicht, wie ich dir direkt schreiben soll. Ich bin ein Anfänger. Im Moment danke sehr sehr viel. Wenn Sie auf meinen neuen Beitrag antworten können, wird es sehr hilfreich sein. – diego

+0

Meine Antwort wurde aktualisiert. Haben alook – Sotos

0

Ein anderer Ansatz merge mit expand.grid aufzufüllen fehlenden Zeilen verwenden könnte und na.locf NA zu füllen.

df <- merge(expand.grid(GROUP=unique(df$GROUP), YEAR=unique(df$YEAR)), df, all=T) 
library(zoo) 
df$VALUE <- zoo::na.locf(df$VALUE) 
df 

Ausgang ist:

GROUP YEAR VALUE 
1  A 2000 190 
2  A 2001 200 
3  B 2000 70 
4  B 2001 70 
+0

Danke, tut mir leid, aber ich habe eine kleine Änderung meine Frage .... – diego

+0

@diego der aktualisierte Datensatz und die erwartete Ausgabe scheint einen Tippfehler zu haben - Header hat 4 Spalten, aber Daten hat 5 Spalten. Möglicherweise müssen Sie den Beispiel- und den erwarteten Datensatz ordnungsgemäß aktualisieren. – Prem

Verwandte Themen