2016-06-05 31 views
6

Ich möchte ein data.frame in eine Liste von data.frames durch Spalten umwandeln, indem ich Basis-R-Funktionen verwende und die erste Spalte konstant halte. Zum Beispiel möchte ich DF in eine Liste von drei data.frames aufteilen, von denen jedes die erste Spalte enthält. Das heißt, ich würde gerne mit der Liste namens LONG enden, ohne jedes Listenelement einzeln austippen zu müssen. Vielen Dank.R convert data.frame, um nach Spalte zu sortieren

DF <- data.frame(OBS=1:10,HEIGHT=rnorm(10),WEIGHT=rnorm(10),TEMP=rnorm(10)) 
DF 

LONG <- list(HEIGHT = DF[c("OBS", "HEIGHT")], 
      WEIGHT = DF[c("OBS", "WEIGHT")], 
      TEMP = DF[c("OBS", "TEMP" )]) 

LONG 

SHORT <- as.list(DF) 
SHORT 

SPLIT <- split(DF, col(DF)) 

Antwort

6

Wir können Schleife durch die names von ‚DF‘ mit Ausnahme der ersten, cbind die erste Spalte mit der Untergruppe von ‚DF‘ aus den names.

setNames(lapply(names(DF)[-1], function(x) cbind(DF[1], DF[x])), names(DF)[-1]) 

Oder eine andere Option wäre

Map(cbind, split.default(DF[-1], names(DF)[-1]), OBS=DF[1]) 
+0

Sehr cool, obwohl ich frage mich, ob es einen Weg gibt die Listennamen als meine LONG Beispiel einschließen tut, oder wenn es eine Möglichkeit, die as.list zu verwenden oder geteilte Funktionen. – user1491868

+1

@ user1491868 können wir 'setNames' verwenden. gerade aktualisiert – akrun

+1

@DavidArenburg Es sollte funktionieren. Danke, dass du das erinnerst. – akrun

Verwandte Themen