티스토리 뷰


5개의 나무에 대한 수령과 둘레를 기록한 아래의 데이터에 대한 tidyr 패키지의

gather()와 spread()를 테스트하자.


Orange 데이터

-------------

> head(Orange)
Grouped Data: circumference ~ age | Tree
  Tree  age circumference
1    1  118            30
2    1  484            58
3    1  664            87
4    1 1004           115
5    1 1231           120
6    1 1372           142

------------


age와 circumference 컬럼에 대한 gather() 수행 

------------

> long_Orange <- Orange %>% + gather(key=측정, value=값, -Tree) > head(long_Orange)

Tree 측정 값 1 1 age 118 2 1 age 484 3 1 age 664 4 1 age 1004 5 1 age 1231 6 1 age 1372

-----------


gather한 '측정' 필드를 다시 spread() 하면 아래와 같은 에러가 발생한다.

에러의 원인과 해결 방안은?

----------------

> long_Orange %>% spread(key=측정, value=값)
Error: Each row of output must be identified by a unique combination of keys.
Keys are shared for 70 rows:
* 15, 16, 17, 18, 19, 20, 21
* 1, 2, 3, 4, 5, 6, 7
* 29, 30, 31, 32, 33, 34, 35
* 8, 9, 10, 11, 12, 13, 14
* 22, 23, 24, 25, 26, 27, 28
* 50, 51, 52, 53, 54, 55, 56
* 36, 37, 38, 39, 40, 41, 42
* 64, 65, 66, 67, 68, 69, 70
* 43, 44, 45, 46, 47, 48, 49
* 57, 58, 59, 60, 61, 62, 63
Do you need to create unique ID with tibble::rowid_to_column()?
Call `rlang::last_error()` to see a backtrace

----------------



Answer : 

 spread 된 상황에서.. Tree 컬럼의 5개의 값( 1, 2, 3, 4, 5)을 갖는다. 

이에 비해 spread 되는 (age, circumference) 는 각각 35개 row 를 갖게 된다.

즉, row의 갯수가 맞지 않는다.


spread()가 동작하기 위해서는 Tree 컬럼이 35개의 unique 한 값을 가질 필요가 있다.

이를 위해서  Tree 컬럼과 age 컬럼을 합한 값을 Tree 컬럼에 넣어서 Unique 하게 만들 필요가 있다.


unique 한 Tree 컬럼을 생성한 후, gather()와 spread()

-------------------

> Orange_2 <- Orange %>% mutate(Tree = paste0(Tree,"_", age))
> head(Orange_2)
    Tree  age circumference
1  1_118  118            30
2  1_484  484            58
3  1_664  664            87
4 1_1004 1004           115
5 1_1231 1231           120
6 1_1372 1372           142
> long_Orange <- Orange_2 %>% 
+   gather(key = 측정, value=값, -Tree)
> head( long_Orange %>% spread(key = 측정, value=값) )
    Tree  age circumference
1 1_1004 1004           115
2  1_118  118            30
3 1_1231 1231           120
4 1_1372 1372           142
5 1_1582 1582           145
6  1_484  484            58

-------------------

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함