2016-08-31 4 views
0

Ich habe einen großen Datensatz df; seine kurze Version sieht wie folgt aus:Kopieren Sie den Wert einer Zeile in der vorherigen Zeile R

Time Block Accuracy 
6087.8 Run2 NA 
633.2 Run2 NA 
547  Run2 incorrect 
135.2 Run2 NA 
6217.6 Run2 NA 
175.2 Run2 NA 
179  Run2 incorrect 

ich den Wert falsche in der vorherigen Reihe von df $ Genauigkeit kopieren wollen, so würde es so aussehen:

Time Block Accuracy 
6087.8 Run2 NA 
633.2 Run2 incorrect 
547  Run2 incorrect 
135.2 Run2 NA 
6217.6 Run2 NA 
175.2 Run2 incorrect 
179  Run2 incorrect 

Was ist die effizienter Weg, es zu tun?

Antwort

1

Um die Zeilen zu sehen, die betroffen sein wird, laufen:

which(df$Accuracy == "incorrect")-1 

which() gibt die Elemente eines Vektors, die für einen bestimmten Booleschen Aussage (in diesem Fall zutreffen, die aus Genauigkeitswerte sind gleich falsch). Wir nehmen dann -1 von jedem Wert in dem Vektor ab, um die vorherigen Zeilenpositionen zu erhalten.

Wir können sie dann ändern:

df[which(df$Accuracy == "incorrect")-1, "Accuracy"] <- "incorrect" 

Dies findet alle Zeilen wie oben und sagt: für die Zeilen und die Spalte „Genauigkeit“, die Werte mit „falsch“ ersetzen.

0

Anstatt "incorrect" fest zu codieren, können Sie einfach unter jedem NA Werte hochschalten.

na_bool = is.na(df$Accuracy) 
df[na_bool,]$Accuracy = df[c(FALSE,na_bool[-length(na_bool)]),]$Accuracy 
Verwandte Themen