pivot_longer

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Alain Blanchet
Messages : 97
Enregistré le : 21 Mai 2013, 09:49

pivot_longer

Messagepar Alain Blanchet » 21 Jan 2022, 14:55

Bonjour,

Je pars d'un fichier en largeur avec quatre facteurs en colonne, et je souhaite obtenir un fichier en longueur comportant deux colonnes facteurs et une colonne score.

comme ceci :

sujet A B score
1 comp pren x1
1 comp visa x2
1 inco pren x3
1 inco visa x4
2 comp ............
.
.
.

Voici le fichier fictif :
library(tidyverse)
comp <- rnorm(150, mean= 365, 20)
inco <- rnorm(150, mean= 470, 25)
pren <- rnorm(150, mean= 400, 22)
visa <- rnorm(150, mean= 435, 29)
suj <- c(1:150)

(data <- tibble(suj, comp,inco, pren, visa))

C'est cette transformation que je n'arrive pas à faire :
(data.w <- data%>%
pivot_longer (
cols= - suj,
......................
))

Je vous remercie pour votre aide

Très cordialement

A.B.

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: pivot_longer

Messagepar Mickael Canouil » 21 Jan 2022, 15:59

Bonjour,

il y a un problème de dimension et/ou il manque la fonction d'aggregation pour score.

Code : Tout sélectionner

data <- data.frame(
  
comp rnorm(150mean 36520),
  
inco rnorm(150mean 47025),
  
pren rnorm(150mean 40022),
  
visa rnorm(150mean 43529),
  
suj c(1:150)
)

library(data.table)
dt <- melt(setDT(data), "suj")
merge(
  
dt[variable %inc("comp""inco")],
  
dt[variable %inc("pren""visa")],
  
by "suj",
  
allow.cartesian TRUE,
  
suffixes c(".A"".B")
)[
  
= list(score rowSums(.SD)),
  
by c("suj"sprintf("variable.%s"c("A""B"))),
  .
SDcols patterns("^value\\.")
]
#>      suj variable.A variable.B    score
#>   1:   1       comp       pren 750.8997
#>   2:   1       comp       visa 775.3726
#>   3:   1       inco       pren 879.3434
#>   4:   1       inco       visa 903.8164
#>   5:   2       comp       pren 756.8211
#>  ---                                   
#> 596: 149       inco       visa 916.4023
#> 597: 150       comp       pren 750.5408
#> 598: 150       comp       visa 728.6616
#> 599: 150       inco       pren 901.8431
#> 600: 150       inco       visa 879.9639 

PS : le code c'est mieux avec les balises de code [ code] [ /code] (sans les espaces)

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

Alain Blanchet
Messages : 97
Enregistré le : 21 Mai 2013, 09:49

Re: pivot_longer

Messagepar Alain Blanchet » 22 Jan 2022, 11:09

Bonjour,

Merci beaucoup, data.table semble plus performant que tidyverse.

Très cordialement,

A.B.

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: pivot_longer

Messagepar Mickael Canouil » 22 Jan 2022, 12:20

En terme de vitesse oui.

Après c'est aussi possible de faire la même opération avec les extensions comprises dans le tidyverse, en particulier {dplyr} et {tidyr}.
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité