2011-11-11 6 views
3

Je souhaite remodeler une base de données et je suis aux prises avec la documentation relative aux fonctions de reconfiguration et de pile. Mon trame de données est le suivant:Réorganisation des données dans R

x<-rnorm(n=20, mean=0, sd=1) 
y<-rnorm(n=20, mean=10, sd=1) 
fact<-rep(1:5, times=4) 
df<-data.frame(x,y,fact) 

En fin de compte, je veux une trame de données 2 de la colonne (40x2) une colonne avec x et y « empilées » et une colonne avec le facteur de x & y correspondant

Répondre

2

I ne sais pas si vous vouliez conserver les informations sur l'endroit où les valeurs provenaient (ie les x ou y colonnes Si vous ne le faites pas alors c'est facile.

df2 <- data.frame(xy = c(df$x,df$y), fact=c(df$fact, df$fact)) 

Si vous voulez conserver les informations contenues dans fact puis l'un d'entre eux:

### Method 1 
df2 <- data.frame(xy = c(df$x,df$y), 
        fact=c(paste("x", df$fact, sep="."), paste("y", df$fact, sep=".")) 
       ) 
str(df2) 
'data.frame': 40 obs. of 2 variables: 
$ xy : num 1.58043 -0.00399 0.84784 -0.10012 -0.27963 ... 
$ fact: Factor w/ 10 levels "x.1","x.2","x.3",..: 1 2 3 4 5 1 2 3 4 5 ... 

### Method 2 
df2 <- stack(df[, 1:2]) 
df2$fact=df$fact 
str(df2) 
'data.frame': 40 obs. of 3 variables: 
$ values: num 1.58043 -0.00399 0.84784 -0.10012 -0.27963 ... 
$ ind : Factor w/ 2 levels "x","y": 1 1 1 1 1 1 1 1 1 1 ... 
$ fact : int 1 2 3 4 5 1 2 3 4 5 ... 
4

Un revêtement avec melt

reshape2::melt(df, id = 'fact', variable.name = 'xy') 
Questions connexes