티스토리 뷰
분석을 하다 보면 데이터 셋의 재구조화 작업을 수도 없이 해야 합니다. 이때 꼭 알고 있어야 하는 reshape 패키지의 cast() 함수에 대해 살펴보겠습니다.
분석에 사용할 reshape 패키지를 다운받고 라이브러리를 불러옵니다.
install.packages(reshape2)
library(reshape2)
우선 데이터 셋을 만듭니다. 4가지 섹션에 A, B 두 샘플의 값으로 간단하게 만들었습니다.
> section <- rep(c('section-1', 'section-2', 'section-3', 'section-4'), times=2)
> sample <- rep(c('A','B'), each=4)
> value <- round(rnorm(8 , 5 , 10))
> data <- data.frame(section, sample, value)
> data
section sample value
1 section-1 A 5
2 section-2 A -1
3 section-3 A -15
4 section-4 A -2
5 section-1 B 9
6 section-2 B -2
7 section-3 B -1
8 section-4 B 3
이 데이터 셋을 cast를 이용해서 section별 sample의 value 값을 볼 수 있습니다.
물론 반대로 sample별 section의 value 값도 볼 수 있습니다.
> cast(data, section~sample)
section A B
1 section-1 5 9
2 section-2 -1 -2
3 section-3 -15 -1
4 section-4 -2 3
> cast(data, sample~section)
sample section-1 section-2 section-3 section-4
1 A 5 -1 -15 -2
2 B 9 -2 -1 3
이때 함수(fun)에 length를 넣어 확인해보면 각 value가 1개씩 존재하는것을 알 수 있습니다. 이렇게 되면 fun에 다른 함수를 넣어도 값이 하나뿐이어서 별다른 의미는 없게 됩니다.
> cast(data, section~sample, fun=length)
section A B
1 section-1 1 1
2 section-2 1 1
3 section-3 1 1
4 section-4 1 1
이해가 쉽게 도식화 해보면 다음과 같습니다.
그럼 한단계 더 나아가서 level을 추가한 데이터 셋을 만들어보겠습니다.
> section <- rep(c('section-1','section-2'), each=8)
> level <- rep(c("level-1" , "level-2" , "level-3", "level-4") , times=4)
> sample <- rep(rep(c('A','B'), each=4), times=2)
> value <- round(rnorm(16 , 5 , 10))
> data <- data.frame(section, level, sample, value)
> data
section level sample value
1 section-1 level-1 A 5
2 section-1 level-2 A 5
3 section-1 level-3 A 7
4 section-1 level-4 A 8
5 section-1 level-1 B 1
6 section-1 level-2 B 12
7 section-1 level-3 B -9
8 section-1 level-4 B 9
9 section-2 level-1 A 9
10 section-2 level-2 A -2
11 section-2 level-3 A 6
12 section-2 level-4 A 6
13 section-2 level-1 B 22
14 section-2 level-2 B 13
15 section-2 level-3 B 10
16 section-2 level-4 B 4
앞에서 했던 방식과 동일하게 cast를 이용해서 section별 sample을 진행하면 무언가 다른 결과가 나온 것을 알 수 있는데요. 이는 fun=length를 이용한 결과와 같습니다. level 변수가 빠졌기 때문에 value 값을 불러올 수가 없고 fun적용 값을 가져오게 되는데요, 따로 입력하지 않을 경우 아래와 같이 default로 length가 적용됩니다.
> cast(data, section~sample)
Aggregation requires fun.aggregate: length used as default
section A B
1 section-1 4 4
2 section-2 4 4
> cast(data, section~sample, fun=length)
section A B
1 section-1 4 4
2 section-2 4 4
그래서 fun에 다른 함수를 넣어 결과를 확인 할 수 있습니다.
> cast(data, section~sample, fun=mean)
section A B
1 section-1 6.25 3.25
2 section-2 4.75 12.25
> cast(data, section~sample, fun=min)
section A B
1 section-1 5 -9
2 section-2 -2 4
그럼 앞에서 사용안한 level변수를 추가해주면 다음과 같은 결과를 볼 수 있습니다. fun값을 입력을 안 했는데 value값이 나왔고, length를 입력해서 확인해보면 각 1개씩 요소가 들어간 결과를 볼 수 있습니다.
> cast(data, section+level~sample)
section level A B
1 section-1 level-1 5 1
2 section-1 level-2 5 12
3 section-1 level-3 7 -9
4 section-1 level-4 8 9
5 section-2 level-1 9 22
6 section-2 level-2 -2 13
7 section-2 level-3 6 10
8 section-2 level-4 6 4
> cast(data, section+level~sample, fun=length)
section level A B
1 section-1 level-1 1 1
2 section-1 level-2 1 1
3 section-1 level-3 1 1
4 section-1 level-4 1 1
5 section-2 level-1 1 1
6 section-2 level-2 1 1
7 section-2 level-3 1 1
8 section-2 level-4 1 1
cast에서 subset 기능을 사용할 수 있는데요 원하는 변수로 조건을 주면 그에 해당하는 부분만 데이터를 얻을 수 있습니다.
> cast(data, section+level~sample, subset=level=='level-1')
section level A B
1 section-1 level-1 5 1
2 section-2 level-1 9 22
> cast(data, section+level~sample, subset=level==c('level-1', 'level-4'))
section level A B
1 section-1 level-1 5 1
2 section-1 level-4 8 9
3 section-2 level-1 9 22
4 section-2 level-4 6 4
포스팅이 데이터 분석에 도움이 되었으면 좋겠습니다.
'R' 카테고리의 다른 글
R | 히스토그램 그리기, hist() (0) | 2020.03.03 |
---|---|
R | reshape2의 melt를 이용한 데이터 재구조화 (0) | 2020.02.14 |
R | 연결된 선이 있는 Bar Plot 그리기(2 samples) (0) | 2020.01.31 |
R | 동일한 데이터로 8가지 기본 그래프 그리기 (ggplot) (0) | 2020.01.31 |
R | aggregation을 이용해 그룹별 데이터 합하기 (0) | 2020.01.30 |
- Total
- Today
- Yesterday
- 팟빵
- visualizing
- for loop
- Visualization
- Order
- comma
- 엑셀
- Python
- 2진수
- Heatmap
- SEQ
- 코로나바이러스
- coronavirus
- Cast
- format
- 데이터
- geom_line
- RStudio
- plot
- r
- 숫자
- Coding
- Command
- 파이썬
- data
- hist
- covid
- BIOINFORMATICS
- Excel
- geom_bar
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |