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.
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)
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
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
...