2017-02-01 7 views
-1

Hier sind einige Daten und Endergebnis hoffe ich. Ich habe eine Anzahl von dfs (Beispiel mit 2) und möchte sie als Liste strukturieren. Beispiel erklärt es besser:Strukturieren von Datenrahmen zur Liste R

names <- as.yearmon(seq(as.Date("2010-01-01"), to=as.Date("2010-05-01"), by="month")) 
names 

df1 <- data.frame(X1 = c(1,2,3,4,5), X2 = c(1,2,3,4,5), X3 = c(1,2,3,4,5)) 
rownames(df1) <- names 
df2 <- data.frame(Y1 = c(10,20,30,40,50), Y2 = c(10,20,30,40,50), Y3 = c(10,20,30,40,50)) 
rownames(df2) <- names 

FullList <- list() 
length(FullList) <- 5 

names(FullList) <- names 

FullList[[1]][[1]] <- df1[match(names(FullList)[1], rownames(df1)), ] 
FullList[[1]][[2]] <- df2[match(names(FullList)[1], rownames(df2)), ] 

FullList[[2]][[1]] <- df1[match(names(FullList)[2], rownames(df1)), ] 
FullList[[2]][[2]] <- df2[match(names(FullList)[2], rownames(df2)), ] 

FullList[[3]][[1]] <- df1[match(names(FullList)[3], rownames(df1)), ] 
FullList[[3]][[2]] <- df2[match(names(FullList)[3], rownames(df2)), ] 

FullList[[4]][[1]] <- df1[match(names(FullList)[4], rownames(df1)), ] 
FullList[[4]][[2]] <- df2[match(names(FullList)[4], rownames(df2)), ] 

FullList[[5]][[1]] <- df1[match(names(FullList)[5], rownames(df1)), ] 
FullList[[5]][[2]] <- df2[match(names(FullList)[5], rownames(df2)), ] 

So von 2 oder mehr Datenrahmen am Ende mit Liste der Liste, mit gemeinsamen Namen als Hauptlistennamen. Endergebnis sollte wie FullList aussehen, was ist die beste Methode, dies zu erreichen?

+0

Dataframes _are_ Listen . Vielleicht willst du einfach "unklassieren"? Im Moment haben Sie Listen mit Elementen, die noch Dataframes sind. War das was du wolltest? –

+0

Die Schrecklichkeit der gewünschten Datenstruktur ignorierend, ist hier eine triviale Art, dieses Format zu erreichen: 'FullList = Mapply (Funktion (x, y) Liste (x, y), Split (df1, rownames (df1)), split (df2, rownames (df2)), SIMPLIFY = F) 'Dies ersetzt den gesamten Code an und unter der Zeile' FullList <- list() ' – Vlo

+0

Danke für Kommentare, vielleicht muss ich meine Struktur überdenken. Ich habe viele verschiedene Dinge, die alle nach Datum geordnet sind, dachte, dass eine Liste mit einem Datum zuerst die Dinge organisiert halten würde. Diese dfs könnten auch Matrix oder Vektor oder etwas anderes sein. – Viitama

Antwort

0

Diese die Anfrage erreichen sollten, aber ich mit Vlo stimmen scheint dies eine unwieldily Daten-Struktur zu sein:

lapply(names, function(nm) { 
     list(df1[ nm == rownames(df1), ,drop=FALSE], 
       df2[ nm == rownames(df2), ,drop=FALSE])) } 
-2

Eine einfache Schleife kann für Sie arbeiten.

for (listrow in 1:5) { 
    for (dataframe in 1:2) { 
eval(parse(text=paste("FullList[[",listrow,"]][[",dataframe,"]] <- df",dataframe,"[match(names(FullList)[",listrow,"], rownames(df",dataframe,")), ]",sep=""))) 
} 
} 

Diese Schleife führt folgende Befehle

for (listrow in 1:5) { 
    for (dataframe in 1:2) { 
    print(paste("FullList[[",listrow,"]][[",dataframe,"]] <- df",dataframe,"[match(names(FullList)[",listrow,"], rownames(df",dataframe,")), ]",sep="")) 
    } 
} 
[1] "FullList[[1]][[1]] <- df1[match(names(FullList)[1], rownames(df1)), ]" 
[1] "FullList[[1]][[2]] <- df2[match(names(FullList)[1], rownames(df2)), ]" 
[1] "FullList[[2]][[1]] <- df1[match(names(FullList)[2], rownames(df1)), ]" 
[1] "FullList[[2]][[2]] <- df2[match(names(FullList)[2], rownames(df2)), ]" 
[1] "FullList[[3]][[1]] <- df1[match(names(FullList)[3], rownames(df1)), ]" 
[1] "FullList[[3]][[2]] <- df2[match(names(FullList)[3], rownames(df2)), ]" 
[1] "FullList[[4]][[1]] <- df1[match(names(FullList)[4], rownames(df1)), ]" 
[1] "FullList[[4]][[2]] <- df2[match(names(FullList)[4], rownames(df2)), ]" 
[1] "FullList[[5]][[1]] <- df1[match(names(FullList)[5], rownames(df1)), ]" 
[1] "FullList[[5]][[2]] <- df2[match(names(FullList)[5], rownames(df2)), ]" 
Verwandte Themen