2017-08-28 2 views
0

Ich habe eine Liste von Datenrahmen, und ich versuche, die Reihenfolge der Spalten zu ändern. Ich habe die Nachricht genaue Fehler, wenn ich dieses Beispiel auszuführen mtcars mit:Der beste Ansatz für die Verwendung von for-Schleifen zum Umordnen von Spalten in einer Liste von Datenrahmen?

cyl.4 <- mtcars %>% filter(cyl==4) %>% select(mpg,carb,gear) 
cyl.5 <- mtcars %>% filter(cyl==5) %>% select(mpg,carb,gear) 

x <- list(cyl.4,cyl.5) 

for (i in seq_along(x)){ 
    names(x[[i]]) <- x[c(2,1,3)] 
} 

Ich bin neu in R und Programmierung, so wenden Sie sich bitte diese Anfänger Frage vergeben. Ich habe eine Weile gekämpft, und ich möchte andere for-Schleifen verwenden, um ähnliche Daten zu reinigen. Ich kann keine zuvor gestellte Frage zum Neuordnen von Spalten in Listen von Datenrahmen finden. Ich habe auch versucht, das Purrr-Paket zu verwenden, aber es ist ein bisschen zu weit fortgeschritten für mich. Danke

+0

Da Sie diese mit 'purrr' markiert, könnten Sie' map() 'und' wählen() ':' map (x, ~ select (.x, c (2,1,3))) ' –

Antwort

3

In Ihrem aktuellen Code ist x[c(2,1,3)] ein data.frame: Sie möchten das nicht verwenden, um Spaltennamen bereitzustellen. Außerdem möchten Sie names()<- nicht verwenden, die nur Spalten umbenennen aber neu anordnen würden.

können Sie versuchen:

cyl.4 <- mtcars %>% filter(cyl==4) %>% select(mpg,carb,gear) 
cyl.5 <- mtcars %>% filter(cyl==5) %>% select(mpg,carb,gear) 

x <- list(cyl.4,cyl.5) 

for (i in seq_along(x)){ 
    x[[i]] <- x[[i]][c(2,1,3)] 
} 
1

Sie dies ohne eine Schleife leicht tun können:

x <- lapply(x, `[`, , c(2, 1, 3)) 

x 
[[1]] 
    carb mpg gear 
1  1 22.8 4 
2  2 24.4 4 
3  2 22.8 4 
4  1 32.4 4 
5  2 30.4 4 
6  1 33.9 4 
7  1 21.5 3 
8  1 27.3 4 
9  2 26.0 5 
10 2 30.4 5 
11 2 21.4 4 

[[2]] 
[1] carb mpg gear 
<0 rows> (or 0-length row.names) 
+0

Das ist ein guter Ansatz, es benutzt aber auch eine (lapply-) Schleife. –

+0

Danke, ich bin etwas verwirrt darüber, was das '[',, c (2, 1, 3) tut. Warum haben '[' , , ? – elliot

+0

Das '\' [\ '' ist die Funktion zur Auswahl von Elementen aus Datenrahmen (wie in 'df [2,3]'). Für einen Datenframe benötigt er zwei Argumente - in diesem Fall ist der erste leer (weil wir alle Zeilen wollen) und der zweite ist die Spalten. Wir gehen also durch jedes Element 'df' der Liste und geben' df [, c (2,1,3)] 'zurück (was auch geschrieben werden kann \ '[\' (df ,, c (2,1 , 3)) ') –

Verwandte Themen