Comment empiler des colonnes de blocs de données dans R



Souvent, vous souhaiterez peut-être empiler deux ou plusieurs colonnes de bloc de données en une seule colonne dans R.

Par exemple, vous souhaiterez peut-être partir de ceci :

  person trial outcome1 outcome2
     A     1        7        4
     A     2        6        4
     B     1        6        5
     B     2        5        5
     C     1        4        3
     C     2        4        2

Pour ça:

   person trial outcomes  value
      A     1   outcome1     7
      A     2   outcome1     6
      B     1   outcome1     6
      B     2   outcome1     5
      C     1   outcome1     4
      C     2   outcome1     4
      A     1   outcome2     4
      A     2   outcome2     4
      B     1   outcome2     5
      B     2   outcome2     5
      C     1   outcome2     3
      C     2   outcome2     2

Ce didacticiel explique deux méthodes que vous pouvez utiliser dans R pour ce faire.

Méthode 1 : utiliser la fonction Stack dans Base R

Le code suivant montre comment empiler des colonnes à l’aide de la fonction stack en base R :

#create original data frame
data <- data.frame(person=c('A', 'A', 'B', 'B', 'C', 'C'),
                   trial=c(1, 2, 1, 2, 1, 2),
                   outcome1=c(7, 6, 6, 5, 4, 4),
                   outcome2=c(4, 4, 5, 5, 3, 2))

#stack the third and fourth columns
cbind(data[1:2], stack(data[3:4]))

   person trial values      ind
1       A     1      7 outcome1
2       A     2      6 outcome1
3       B     1      6 outcome1
4       B     2      5 outcome1
5       C     1      4 outcome1
6       C     2      4 outcome1
7       A     1      4 outcome2
8       A     2      4 outcome2
9       B     1      5 outcome2
10      B     2      5 outcome2
11      C     1      3 outcome2
12      C     2      2 outcome2

Méthode 2 : utiliser la fonction Melt de Reshape2

Le code suivant montre comment empiler des colonnes à l’aide de la fonction melt de la bibliothèque reshape2 :

#load library
library(reshape2)

#create original data frame
data <- data.frame(person=c('A', 'A', 'B', 'B', 'C', 'C'),
                   trial=c(1, 2, 1, 2, 1, 2),
                   outcome1=c(7, 6, 6, 5, 4, 4),
                   outcome2=c(4, 4, 5, 5, 3, 2))

#melt columns of data frame
melt(data, id.var = c('person', 'trial'), variable.name = 'outcomes')

   person trial outcomes value
1       A     1 outcome1     7
2       A     2 outcome1     6
3       B     1 outcome1     6
4       B     2 outcome1     5
5       C     1 outcome1     4
6       C     2 outcome1     4
7       A     1 outcome2     4
8       A     2 outcome2     4
9       B     1 outcome2     5
10      B     2 outcome2     5
11      C     1 outcome2     3
12      C     2 outcome2     2

Vous pouvez trouver la documentation complète de la fonction de fusion ici .

Ressources additionnelles

Comment changer deux colonnes dans R
Comment renommer des colonnes dans R
Comment additionner des colonnes spécifiques dans R

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *