J'ai un problème avec la fonction rassembler () du paquet tidyr.

sample
# A tibble: 5 × 6
  market_share      Y2012      Y2013      Y2014      Y2015      Y2016
         <chr>      <dbl>      <dbl>      <dbl>      <dbl>      <dbl>
1          KAB 0.23469425 0.23513725 0.23187590 0.22940831 0.22662625
2          BGD 0.21353096 0.21352769 0.20910574 0.20035900 0.19374223
3          NN 0.16891699 0.16204919 0.16272993 0.16388675 0.16154017
4         OG 0.07648682 0.07597078 0.07945966 0.07780233 0.08069057
5         Ha 0.05092648 0.05480555 0.06434457 0.07127716 0.08054208

Si j'essaye:

sample2 <- gather(sample, market_share, period, Y2012:Y2016)
Error: Each variable must have a unique name.
Problem variables: 'market_share'

Cependant, chaque variable semble avoir un nom unique.

Ha  KAB  BGD  NN OG 
   1    1    1    1    1 

Cela semble être un problème courant que les gens ont avec le rassemblement, mais je ne comprends pas.

7
Prometheus 20 avril 2017 à 18:04

3 réponses

Meilleure réponse

Les deuxième et troisième arguments sont les noms de la colonne clé et valeur à créer dans la sortie. Avoir deux colonnes avec le même nom est étrange et ne fonctionne pas bien avec d'autres fonctions de tidyr ou dplyr. Je suggère de donner d'autres noms aux nouvelles colonnes. Par conséquent, vous pouvez essayer:

sample2 <- gather(sample, period, value, Y2012:Y2016)
6
mt1022 20 avril 2017 à 15:37

Le message d'erreur vous indique que vous essayez de créer une nouvelle colonne market_share, mais elle existe déjà. Vous devez mettre period à la deuxième place car c'est la colonne que vous essayez de créer.

df1<-read.table(text="market_share      Y2012      Y2013      Y2014      Y2015      Y2016
KAB 0.23469425 0.23513725 0.23187590 0.22940831 0.22662625
BGD 0.21353096 0.21352769 0.20910574 0.20035900 0.19374223
NN 0.16891699 0.16204919 0.16272993 0.16388675 0.16154017
OG 0.07648682 0.07597078 0.07945966 0.07780233 0.08069057
Ha 0.05092648 0.05480555 0.06434457 0.07127716 0.08054208",header=TRUE, stringsAsFactors=FALSE)

library(tidyr)    
gather(df1, period,market_share)

   market_share period market_share
1           KAB  Y2012   0.23469425
2           BGD  Y2012   0.21353096
3            NN  Y2012   0.16891699
4            OG  Y2012   0.07648682
5            Ha  Y2012   0.05092648
6           KAB  Y2013   0.23513725
7           BGD  Y2013   0.21352769
8            NN  Y2013   0.16204919
9            OG  Y2013   0.07597078
10           Ha  Y2013   0.05480555
2
Pierre Lapointe 20 avril 2017 à 15:23

Quand on regarde vos données, il semble que vos données soient un objet tibble (voir tibble :: tibble). Mais gather nécessite un data.frame. Essayez de changer votre objet en data.frame:

sample2 <- gather(data.frame(sample),market_share, period, Y2012:Y2016)

Cela devrait résoudre votre problème.

Exemple:

library(tibble)
sample <- read.table(text="market_share Y2012 Y2013 Y2014 Y2015 Y2016
KAB 0.23469425 0.23513725 0.23187590 0.22940831 0.22662625
BGD 0.21353096 0.21352769 0.20910574 0.20035900 0.19374223
NN 0.16891699 0.16204919 0.16272993 0.16388675 0.16154017
OG 0.07648682 0.07597078 0.07945966 0.07780233 0.08069057
Ha 0.05092648 0.05480555 0.06434457 0.07127716 0.08054208",
header=TRUE, stringsAsFactors=FALSE)  

sample <- as_tibble(sample)  
sample

# A tibble: 5 x 6
  market_share      Y2012      Y2013      Y2014      Y2015      Y2016
         <chr>      <dbl>      <dbl>      <dbl>      <dbl>      <dbl>
1          KAB 0.23469425 0.23513725 0.23187590 0.22940831 0.22662625
2          BGD 0.21353096 0.21352769 0.20910574 0.20035900 0.19374223
3           NN 0.16891699 0.16204919 0.16272993 0.16388675 0.16154017
4           OG 0.07648682 0.07597078 0.07945966 0.07780233 0.08069057
5           Ha 0.05092648 0.05480555 0.06434457 0.07127716 0.08054208

sample2 <- gather(sample, period, result, Y2012:Y2016) # Does not work
Error: Column 'market_share' must have a unique name

Cela ne fonctionne pas mais si vous le changez en data.frame, cela fonctionne:

sample2 <- sample2 <- gather(data.frame(sample), period, result, Y2012:Y2016) # works perfect`
sample2
       market_share period     result
1           KAB  Y2012 0.23469425
2           BGD  Y2012 0.21353096
3            NN  Y2012 0.16891699
4            OG  Y2012 0.07648682
5            Ha  Y2012 0.05092648
6           KAB  Y2013 0.23513725
...
0
Joern 9 août 2017 à 13:55