当我有唯一的名字时 tidyr::gather() 出错
error with tidyr::gather() when I have unique names
我对 tidyr 包中的 gather() 函数有疑问。
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
如果我尝试:
sample2 <- gather(sample, market_share, period, Y2012:Y2016)
Error: Each variable must have a unique name.
Problem variables: 'market_share'
但是,每个变量似乎都有一个唯一的名称。
Ha KAB BGD NN OG
1 1 1 1 1
这似乎是人们在使用 gather 时遇到的一个常见问题,但我不明白。
错误消息告诉您您正在尝试创建一个新列 market_share
,但它已经存在。您需要将 period
放在第二个位置,因为这是您要创建的列。
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
第二个和第三个参数是要在输出中创建的键和值列的名称。具有两个同名的列是奇怪的,并且不能很好地与 tidyr
或 dplyr
的其他函数一起使用。我建议为新列指定其他名称。因此,你可以试试:
sample2 <- gather(sample, period, value, Y2012:Y2016)
查看您的数据时,您的数据似乎是一个 tibble
对象(参见 tibble::tibble)。但是 gather
需要一个 data.frame。
尝试将您的对象更改为 data.frame:
sample2 <- gather(data.frame(sample),market_share, period, Y2012:Y2016)
这应该可以解决您的问题。
示例:
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
这行不通,但如果您将其更改为 data.frame
,它会起作用:
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
...
我对 tidyr 包中的 gather() 函数有疑问。
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
如果我尝试:
sample2 <- gather(sample, market_share, period, Y2012:Y2016)
Error: Each variable must have a unique name.
Problem variables: 'market_share'
但是,每个变量似乎都有一个唯一的名称。
Ha KAB BGD NN OG
1 1 1 1 1
这似乎是人们在使用 gather 时遇到的一个常见问题,但我不明白。
错误消息告诉您您正在尝试创建一个新列 market_share
,但它已经存在。您需要将 period
放在第二个位置,因为这是您要创建的列。
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
第二个和第三个参数是要在输出中创建的键和值列的名称。具有两个同名的列是奇怪的,并且不能很好地与 tidyr
或 dplyr
的其他函数一起使用。我建议为新列指定其他名称。因此,你可以试试:
sample2 <- gather(sample, period, value, Y2012:Y2016)
查看您的数据时,您的数据似乎是一个 tibble
对象(参见 tibble::tibble)。但是 gather
需要一个 data.frame。
尝试将您的对象更改为 data.frame:
sample2 <- gather(data.frame(sample),market_share, period, Y2012:Y2016)
这应该可以解决您的问题。
示例:
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
这行不通,但如果您将其更改为 data.frame
,它会起作用:
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
...