4 Stimmen

Neuordnung eines Datenrahmens in R

Der folgende R-Code generiert ein Snippet aus einem Datenrahmen, mit dem ich gerade arbeite:

rep1 <- c("20/02/01","23/03/02")
rep2 <- c(NA, "03/05/02")
rep3 <- c("16/04/01",NA)
rep4 <- c(NA,"12/02/03")
data <- data.frame(rep1 = rep1, rep2 = rep2, rep3 = rep3, rep4 = rep4)

Der durch den Code erzeugte Datenrahmen sieht wie folgt aus:

      rep1     rep2     rep3     rep4
1 20/02/01     <NA> 16/04/01     <NA>
2 23/03/02 03/05/02     <NA> 12/02/03

Ich möchte diesen Datenrahmen so umgestalten, dass er wie folgt aussieht:

      rep1     rep2   rep3     rep4
1 20/02/01 16/04/01    <NA>     <NA>
2 23/03/02 03/05/02   12/02/03   <NA> 

Das heißt, für jede Zeile möchte ich jeden NA durch den nächsten Eintrag in der Zeile ersetzen, bis nur noch NAs in der Zeile sind.

Der eigentliche Datenrahmen besteht aus vielen tausend Zeilen, so dass eine manuelle Bearbeitung viele Überstunden im Büro bedeuten würde.

Wenn mir jemand sagen könnte, wie man das in R macht, wäre ich sehr dankbar!

1voto

Vince Punkte 7516

Ich bin mir nicht sicher, ob ich das verstehe, aber es scheint, dass Sie die NAs an die Endspalten verschieben wollen? Hier ist eine Möglichkeit (schnell gemacht; vielleicht gibt es eine sauberere Methode):

> d <- data.frame(rbind(c(1, 2, NA, 4, NA, 6), c(NA, 2, 3, 4, 5, 6)))
> d
  X1 X2 X3 X4 X5 X6
1  1  2 NA  4 NA  6
2 NA  2  3  4  5  6
> t(apply(d, 1, function(x) c(x[!is.na(x)], rep(NA, sum(is.na(x))))))
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    4    6   NA   NA
[2,]    2    3    4    5    6   NA

Über Ihre Daten:

> t(apply(data, 1, function(x) c(x[!is.na(x)], rep(NA, sum(is.na(x))))))
     [,1]       [,2]       [,3]       [,4]
[1,] "20/02/01" "16/04/01" NA         NA  
[2,] "23/03/02" "03/05/02" "12/02/03" NA

0voto

Eduardo Leoni Punkte 9014

Entsprechend dem Vorschlag von Vince, aber vielleicht ein bisschen sauberer:

t(apply(d, 1, function(x) x[order(x)]))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X