web-dev-qa-db-fra.com

erreur avec tidyr :: rassembler () quand j'ai des noms uniques

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 se rassembler, mais je ne comprends pas. 

7
Prometheus

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

sample2 <- gather(sample, period, value, Y2012:Y2016)
6
mt1022

Le message d'erreur vous indique que vous essayez de créer une nouvelle colonne market_share, mais que celle-ci 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

En regardant vos données, il semble que vos données sont un objet tibble (voir tibble :: tibble). Mais gather nécessite un nom de données.fr. Essayez de changer votre objet en un nom de données.fr:

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