2010-04-01 8 views
1

Je voudrais créer, dans une fonction, une boucle pour créer un data.frame avec un nombre variable de colonnes.Comment créer un data.frame avec un nombre inconnu de colonnes?

quelque chose comme:

a = c("a","b") 
b = c(list(1,2,3), list(4,5,6)) 
data.frame(a,b) 

Je voudrais obtenir un cadre de données comme:

a 1 2 3 
b 4 5 6 

Au lieu de j'obtenir:

a 1 2 3 4 5 6 
b 1 2 3 4 5 6 

Merci!

PS: J'essaie aussi avec rbind, mais il est ne fonctionne pas ...

+0

Est-ce que 'a' représente un nom de colonne ou de ligne? – Shane

Répondre

3

Avez-vous les 2 listes b détenues comme des variables distinctes?

Si oui, vous pouvez utiliser:

x<-data.frame(rbind(b1,b2)) 
rownames(x)<-a 
6

Il y a plusieurs façons de faire ce genre de chose. Votre premier problème est que votre objet "b" n'est pas une matrice. Vous devez le définir comme un avec des lignes et des colonnes (ou en utilisant rbind).

Vous pouvez créer les blocs de données, puis les combiner (cela vaut mieux que de travailler avec une matrice, car chaque objet sera maintenu en tant que type numérique ou caractère, etc., alors qu'une matrice le perdra):

x1 <- data.frame(X=c("a","b")) 
x2 <- data.frame(rbind(c(1,2,3), c(4,5,6))) 
data.frame(x1, x2) 
    X X1 X2 X3 
1 a 1 2 3 
2 b 4 5 6 

Si x1 est pour rownames, alors vous devriez suivre l'exemple de James:

x2 <- data.frame(rbind(c(1,2,3), c(4,5,6))) 
rownames(x2) <- c("a","b") 
2

Une autre façon

a = c("a","b") 
b = list(c(1,2,3), c(4,5,6)) 

library(plyr) 
df <- ldply(b) 
rownames(df) <- a 
0

Merci beaucoup! Avant de lire votre réponse, j'ai essayé une autre méthode utilisant:

for (x in niveaux) { 
    assign(x,pi) 
    assign(paste(x,"moy"),"moy") 
    } 
# Que j'utilise ensuite avec qq chose du genre : 
assign(x,append(get(x),1)) 

Mais il est plus compliqué!

Olivier

PS: 'a' peut être un rowname ou une colonne, le but est d'exporter data.frame en tant que fichier CSV.

Questions connexes