2017-04-20 4 views
5

tidyr 패키지의 gather() 함수에 문제가 있습니다.고유 한 이름을 가진 경우 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 

사람들이 모으는 공통된 문제인 것처럼 보입니다.하지만 이해가 가지 않습니다.

답변

5

두 번째 및 세 번째 인수는 출력시 생성 될 키 및 값 열의 이름입니다. 동일한 이름을 가진 두 개의 열이 홀수이며 tidyr 또는 dplyr의 다른 함수와 잘 작동하지 않습니다. 새 열에 다른 이름을 지정하는 것이 좋습니다. 따라서, 당신은 시도 할 수 있습니다 : 데이터를 볼 때

sample2 <- gather(sample, period, value, Y2012:Y2016) 
+0

합니다. 나는 오류가 데이터 프레임의 필드 내에서 중복 된 값을 골라내는 것으로 생각했다. 나에게 일어난 일이 아니었다. 나는 그 이름으로 그 이름을 복사하고 있었다. 감사! – Prometheus

1

새 메시지 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 
0

, 당신의 데이터가 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 
...