2016-03-27 8 views
1

Ich möchte eine Liste oder viele data.frame aus einem Datenrahmen gleichzeitig nach dem Aufteilen einer Matrix erstellen. Ich benutze die Funktion combn, um eine Matrix zu erstellen. Zum Beispiel:teilen Sie einen Datenrahmen und erstellen Sie viele Datenrahmen oder Liste

combos<-combn(1:3, 2) 
combos 
[,1] [,2] [,3] 
[1,] 1 1 2 
[2,] 2 3 3                

Nachdem ich einen Datenrahmen mit 3 Spalten haben.

col1<-c(0,2,4);col2<-c(1,3,5);col3<-c(6,7,8) 
df<-cbind.data.frame(col1,col2,col3) 
df 
     col1 col2 col3 
1 0 1 6 
2 2 3 7 
3 4 5 8 

Combos Ich möchte dies in Datenrahmen oder Liste erhalten Ergebnisse:

df1 
     col1 col2 
1 0 1 
2 2 3 
3 4 5 
df2 
     col1 col3 
1 0  6 
2 2  7 
3 4  8 
df3 
     col2 col3 
1  1 6 
2  3 7 
3  5 8  

Nach kommt, dass Ich mochte diesen Datenrahmen oder eine Liste mit anderen Datenrahmen oder Liste beitreten zu bekommen dieses Ergebnis: diese neuen Daten dfo

col1<-c('a','c'); col2<-c('b','d') 
dfo<-cbind.data.frame(col1,col2) 
     col1 col2 
1 a b 
2 c d 

df1o 
     col1 col2 
1 0 1 
2 2 3 
3 4 5 
4 a b 
5 c d 

df2o 
     col1 col3 
1 0  6 
2 2  7 
3 4  8 
4 a  b 
5 c  d 

df3o 
     col2 col3 
    1  1 6 
    2  3 7 
    3  5 8 
    4  a b 
    5  c d 

mit ich habe 3000 df und 5000 dfo

+1

'combn (1: 3, 2, FUN = Funktion (x) rbind (df [x], setNames (DFO, Namen (df [x]))), vereinfachen = FALSE)' (vorausgesetzt, Sie möchten Zahlen und Buchstaben wie folgt kombinieren) – user20650

+1

Danke user20650. Ich liege falsch auf der Post. Briefe waren nur zum Beispiel. Ich möchte Zahlen und Zahlen kombinieren, (dfo sind auch Zahlen). Sorry, ich war mein erster Beitrag! –

+0

In dieser Bearbeitung wurden keine Matrizen verletzt. –

Antwort

0

Eigentlich können Sie lapply verwenden, um eine Liste zu durchlaufen.

combos <- combn(1:3, 2) 

col1 <- c(0,2,4); col2 <- c(1,3,5); col3 <- c(6,7,8) 
df <- cbind.data.frame(col1,col2,col3) 

df.1 <- lapply(1:ncol(combos), function(i){df[, combos[,i]]}) 

col1 <- c('a','c'); col2 <- c('b','d') 
dfo <- cbind.data.frame(col1,col2) 

dfo.1 <- lapply(df.1, function(x){ 
    names(dfo) <- names(x) 
    return(rbind(x, dfo)) 
}) 
# [[1]] 
# col1 col2 
# 1 0 1 
# 2 2 3 
# 3 4 5 
# 4 a b 
# 5 c d 
# 
# [[2]] 
# col1 col3 
# 1 0 6 
# 2 2 7 
# 3 4 8 
# 4 a b 
# 5 c d 
# 
# [[3]] 
# col2 col3 
# 1 1 6 
# 2 3 7 
# 3 5 8 
# 4 a b 
# 5 c d 
Verwandte Themen