Eine Datentabelle Statusbericht für Projekte, die von Lebensjahr zeigt:links von einer Reihe spezifischer Spaltenindexwertes in der gleichen Zeile
def <- data.frame(c("ProjA", "ProjB", "ProjC"), c("0", "2", "2"),
c("Active", "Cancelled", "Distressed"), c("Active", NA, "Distressed"),
c("Active", "Cancelled", "Distressed"), c("Active", NA, "Distressed"), stringsAsFactors = FALSE)
colnames(def) <- c("proj.name", "status.update.year", "year.0", "year.1", "year.2", "year.3")
def$status.update.year <- as.numeric(def$status.update.year)
def
proj.name status.update.year year.0 year.1 year.2 year.3
1 ProjA 0 Active Active Active Active
2 ProjB 2 Cancelled <NA> Cancelled <NA>
3 ProjC 2 Distressed Distressed Distressed Distressed
status.update.year
variable Datensätze Jahr der Veränderung von "Active"
in einen anderen Status.
Projekte sollten beginnen "Active"
, aber ein Projekt, das "Distressed"
in Jahr 3 wurde, wird jetzt in allen vergangenen Jahren "Distressed"
berichtet, für die es eine Beobachtung gibt. Diese fehlerhafte Rückdatierung will ich korrigieren.
Ich möchte die Zeilenwerte für die mit "0" bis "3" beschrifteten Spalten so ändern, dass vor dem Jahr der Statusaktualisierung alle Nicht-NA-Beobachtungen vor dem Jahr der Statusänderung mit "Aktiv" markiert werden führen wie folgt aus:
proj.name status.update.year year.0 year.1 year.2 year.3
1 ProjA 0 Active Active Active Active
2 ProjB 2 Active <NA> Cancelled <NA>
3 ProjC 2 Active Active Distressed Distressed
ich alle nicht-NA Beobachtungen für jede Zeile vor der letzte nicht-NA Beobachtung finden:
apply(def[ ,3:6], 1, function(x) { head(x[!is.na(x)], -1) })
Wie diese Werte ersetzen mit "Active"
, wenn sie vor jeder Reihe spezifische status.update.year
sind?
Also, wenn ich das richtig verstehe, Sie alle Fälle konvertieren möchten, wo das Jahr <= 'status.update .year zu 'Active' außer wo es eine NA gibt? –
Ja genau richtig. – user983465