정보
-
업무명 : R을 이용한 통계 분석 및 데이터 시각화 : dplyr
-
작성자 : 박진만
-
작성일 : 2020-04-09
-
설 명 :
-
수정이력 :
내용
[개요]
-
R은 통계 분석 및 시각화 등의 기능을 갖춘 프로그래밍 언어 내지 통계 분석 환경입니다.
-
통계 분석 기능으로 통계 검정, 선형 회귀 분석, 시계열 데이터 분석, 클러스터링 등을 지원하고 있습니다.
-
또한 최신 논문에서 발표된 같은 새로운 기술도 R로 구현되는 경우가 많습니다.
-
특히 시각화 기능으로 히스토그램, 막대 그래프, 선 그래프, 산포도, 나무 모양 그림이나 히트맵 등 기본적인 그래프가 기본으로 지원하고 있습니다.
-
또한 ggplot2 등의 패키지를 사용하여 더 높은 수준의 그림을 가시화할 수 있습니다.
[특징]
-
데이터를 이해하기 위해서 통계 분석 및 데이터 시각화가 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어
[기능]
-
데이터형 소개
[활용 자료]
-
없음
[자료 처리 방안 및 활용 분석 기법]
-
없음
[사용법]
-
소스 코드 예시 참조
[사용 OS]
-
Windows 10
[사용 언어]
-
R v3.6.2
-
R Studio v1.2.5033
소스 코드
[dplyr]
-
dplyr는 데이터프레임 조작에 특화된 R 패키지이다.
-
dplyr 패키지는 데이터프레임 형태의 데이터 중 일부를 추출 할 수 있는 함수와 추출 된 하위 집합을 집계하는 함수 등이 다수 포함되어 있다.
-
dplyr에서 취급하는 데이터는 수백 MB에서 2 GB 전후의 크기를 상정하고 있다. 즉 이 크기를 초과하는 10 ~ 100 GB 대규모 빅 데이터 등을 취급하는 경우 data.table 패키지를 사용하는 것이 좋다.
-
dplyr 함수는 작성하는 방법이 매우 간단하고 가독성이 좋다. dplyr을 사용함으로써, 연구자들은 데이터의 조작이나 집계에 집중할 수 있으며, 불필요한 코드를 작성하지 않아도 된다.
[dplyr 패키지를 사용하지 않는 데이터 조작 예시]
-
R은 데이터 프레임 중에서의 조건을 만족하는 부분 집합을 추출하고 그 부분 집합의 평균을 구하거나 하는 작업을 수행할 수 있다.
-
여기서는 rice 데이터 세트를 사용하여 데이터를 조작하는 방법을 보여준다.
-
rice 데이터 세트는 7 열을 가지며 각각의 열이 개체 번호 (replicate) 블록 번호 (block), 뿌리 부분 건조 중량 (root_dry_mass) 지상부 건조 중량 (shoot_dry_mass) 계통 처리 (trt), 처리 (fert) 계통 (variety)로 구성된다.
d <- read.table('data/rice.txt', header = TRUE, sep = '\t')
head(d)
## replicate block root_dry_mass shoot_dry_mass trt fert variety
## 1 1 1 56 132 F10 F10 wt
## 2 2 1 66 120 F10 F10 wt
## 3 3 1 40 108 F10 F10 wt
## 4 4 1 43 134 F10 F10 wt
## 5 5 1 55 119 F10 F10 wt
## 6 6 1 66 125 F10 F10 wt
-
여기에서 예를 들어, 각 계통 (wt 계통 및 ANU843 계통)에 대해 근부 건조 중량을 요구하는 경우, 데이터 프레임에 대해 다음과 같은 작업을 수행하여 계산할 수있다.
wt <- d$root_dry_mass[d$variety == 'wt']
ANU843 <- d$root_dry_mass[d$variety == 'ANU843']
print(mean(wt))
## [1] 26.47222
print(mean(ANU843))
## [1] 9.666667
-
평균 · 최대 · 최소치 등의 간단한 값을 구할 때도 역시 R의 표준 함수 중 하나 인 aggregate 함수를 사용하면 편리하다.
aggregate(d$root_dry_mass, by = list(variety = d$variety), mean)
## variety x
## 1 ANU843 9.666667
## 2 wt 26.472222
-
그리고 wt 계통과 ANU843 계통의 각 처리 군 각각에 대해 근부 건조 무게의 평균을 계산하려면 아래와 같이 작성한다.
wt.F10 <- d$root_dry_mass[d$variety == 'wt' & d$fert == 'F10']
wt.NH4Cl <- d$root_dry_mass[d$variety == 'wt' & d$fert == 'NH4Cl']
wt.NH4NO3 <- d$root_dry_mass[d$variety == 'wt' & d$fert == 'NH4NO3']
ANU843.F10 <- d$root_dry_mass[d$variety == 'ANU843' & d$fert == 'F10']
ANU843.NH4Cl <- d$root_dry_mass[d$variety == 'ANU843' & d$fert == 'NH4Cl']
ANU843.NH4NO3 <- d$root_dry_mass[d$variety == 'ANU843' & d$fert == 'NH4NO3']
m <- c(mean(wt.F10), mean(wt.NH4Cl), mean(wt.NH4NO3),
mean(ANU843.F10), mean(ANU843.NH4Cl), mean(ANU843.NH4NO3))
print(m)
## [1] 49.500000 12.583333 17.333333 6.000000 9.166667 13.833333
-
여러 조건의 조합으로 aggregate함수를 사용할 수있다. 예를 들어 다음과 같이 by 옵션 두 가지 조건을 주면된다.
aggregate(d$root_dry_mass, by = list(variety = d$variety, fert = d$fert), mean)
## variety fert x
## 1 ANU843 F10 6.000000
## 2 wt F10 49.500000
## 3 ANU843 NH4Cl 9.166667
## 4 wt NH4Cl 12.583333
## 5 ANU843 NH4NO3 13.833333
## 6 wt NH4NO3 17.333333
[dplyr의 기본적인 사용법]
-
dplyr를 사용하여 데이터 작업을 처리 할 때 데이터의 흐름에 주목하면 알기 쉽다.
-
예를 들어, d는 데이터에 대해 A 처리를 행한 후 B 처리를 실시해, 그 결과를 x로 저장하고 싶은 경우는 d → A → B → x라는 흐름에 주목하면 dplyr 규칙에 따라 아래와 같은 흐름 구조를 지닌다.
-
즉 d의 내용을 함수 A에 흐르는 때 %>%연산자를 사용한다. 다음으로 A 함수에서 처리 한 결과를 B 함수 흘리는 때처럼 %>%연산자를 사용한다. 마지막으로, 함수 B의 처리 결과를 x에 대입 하고자 하므로, R의 기본 문법에 따라 ->를 사용한다.
d %>% A %>% B -> x
-
또한 프로그래밍 언어에서는 대입 연산자의 오른쪽 연산 결과를 왼쪽에 대입한다는 암시 규칙이 있기 때문에, 다음과 같이 쓰는 것이 일반적이다.
x <- d %>% A %>% B
-
위와 같은 dplyr 규칙을 바탕으로 wt 계통의 개체수를 요구하려면, 아래와 같이 할 수 있다.
-
즉 데이터 d를 group_by함수에 흘려 여기 variety별로 그룹화한다. 그리고 그룹화를 행한 후, 각 그룹을 더 다음 summarise함수에 흘려 평균을 구할 처리를 행하고있다.
d <- read_tsv('data/rice.txt')
head(d)
## # A tibble: 6 x 7
## replicate block root_dry_mass shoot_dry_mass trt fert variety
## <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr>
## 1 1 1 56 132 F10 F10 wt
## 2 2 1 66 120 F10 F10 wt
## 3 3 1 40 108 F10 F10 wt
## 4 4 1 43 134 F10 F10 wt
## 5 5 1 55 119 F10 F10 wt
## 6 6 1 66 125 F10 F10 wt
variety_ave <- d %>%
group_by(variety) %>%
summarise(mass_ave = mean(root_dry_mass))
head(variety_ave)
## # A tibble: 2 x 2
## variety mass_ave
## <chr> <dbl>
## 1 ANU843 9.67
## 2 wt 26.5
-
각 계통의 각 처리 군에 대해 평균을 구할 경우, aggregate함수와 마찬가지로 group_by에 조건을 쓰면 좋다.
variety_ave <- d %>%
group_by(variety, fert) %>%
summarise(mass_ave = mean(root_dry_mass))
head(variety_ave)
## # A tibble: 6 x 3
## # Groups: variety [2]
## variety fert mass_ave
## <chr> <chr> <dbl>
## 1 ANU843 F10 6
## 2 ANU843 NH4Cl 9.17
## 3 ANU843 NH4NO3 13.8
## 4 wt F10 49.5
## 5 wt NH4Cl 12.6
## 6 wt NH4NO3 17.3
-
이처럼 dplyr는 데이터의 흐름에 주목하여 데이터의 조작이나 집계를 해나 갈 수있다. 연구자가 데이터 조작 데이터 집계에 관계없이 코드를 작성할 필요없이 효율적이다.
[dplyr의 기본 함수]
-
dplyr 패키지에서 자주 사용하는 함수에는 다음과 같은 것이 있다.
함수 | 동작 |
select | 주어진 조건에 따라 특정 열을 추출한다. |
filter | 주어진 조건에 따라 특정 행을 추출한다. |
arrange | 주어진 조건에 따라 행을 정렬합니다. |
group_by | 주어진 조건에 따라 전체 데이터 집합을 여러 그룹으로 나눈다. |
summarise | 최대 · 최소 · 평균치를 요구하는 등의 데이터의 집계를 실시한다. |
mutate | 기존 데이터 세트에 새 열을 추가한다. |
[dplyr::select 함수]
-
select함수는 주어진 조건에 따라 특정 열을 추출하는 함수이다.
-
예를 들어 rice 데이터 세트에서 계통 (variety), 처리 (fert), 뿌리 부분 건조 중량 (root_dry_mass) 지상부 건조 중량 (shoot_dry_mass)의 4 열만을 꺼내 집합을 만들려면 아래와 같이 작성한다.
# d.subset <- d[, c('variety', 'fert', 'root_dry_mass', 'shoot_dry_mass')]
d.subset <- d %>% select(variety, fert, root_dry_mass, shoot_dry_mass)
head(d.subset)
## # A tibble: 6 x 4
## variety fert root_dry_mass shoot_dry_mass
## <chr> <chr> <dbl> <dbl>
## 1 wt F10 56 132
## 2 wt F10 66 120
## 3 wt F10 40 108
## 4 wt F10 43 134
## 5 wt F10 55 119
## 6 wt F10 66 125
-
select 함수에 열 이름을 지정할 때 -를 쓰면 열을 포함하지 않도록 하는 하위 집합이 생성된다.
# d.subset <- d[, -c('replicate', 'block', 'trt')]
d.subset <- d %>% select(-replicate, -block, -trt)
head(d.subset)
## # A tibble: 6 x 4
## root_dry_mass shoot_dry_mass fert variety
## <dbl> <dbl> <chr> <chr>
## 1 56 132 F10 wt
## 2 66 120 F10 wt
## 3 40 108 F10 wt
## 4 43 134 F10 wt
## 5 55 119 F10 wt
## 6 66 125 F10 wt
-
select함수에 열 이름이 아니라 조건을 이용하여 열을 추출 할 수있다. 예를 들어, 열 이름에 mass를 포함하는 열을 추출하려면 아래와 같이 작성한다.
d.subset <- d %>% select(contains('mass'))
head(d.subset)
## # A tibble: 6 x 2
## root_dry_mass shoot_dry_mass
## <dbl> <dbl>
## 1 56 132
## 2 66 120
## 3 40 108
## 4 43 134
## 5 55 119
## 6 66 125
-
조건을 줄 때 사용하는 contains함수 외에 starts_with, ends_with, matches 등의 기능도 사용할 수 있다.
[dplyr::filter 함수]
-
filter함수는 주어진 조건에 따라 특정 행을 추출하는 함수이다. 예를 들어, 근부 건조 중량이 50 개 이상의 행을 추출하려면 아래와 같이 작성한다.
d.subset <- d %>% filter(root_dry_mass > 50)
head(d.subset)
## # A tibble: 5 x 7
## replicate block root_dry_mass shoot_dry_mass trt fert variety
## <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr>
## 1 1 1 56 132 F10 F10 wt
## 2 2 1 66 120 F10 F10 wt
## 3 5 1 55 119 F10 F10 wt
## 4 6 1 66 125 F10 F10 wt
## 5 8 2 67 122 F10 F10 wt
-
조건이 여러 개인 경우, 그 조건을 차례로 filter 함수에 입력하면 좋다. 예를 들어, wt 계통과 근부 건조 중량이 50 개 이상의 행을 추출하려면 아래와 같이 작성한다.
d.subset <- d %>% filter(root_dry_mass >= 50, variety == 'wt')
head(d.subset)
## # A tibble: 5 x 7
## replicate block root_dry_mass shoot_dry_mass trt fert variety
## <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr>
## 1 1 1 56 132 F10 F10 wt
## 2 2 1 66 120 F10 F10 wt
## 3 5 1 55 119 F10 F10 wt
## 4 6 1 66 125 F10 F10 wt
## 5 8 2 67 122 F10 F10 wt
-
여러 조건의 경우 &및 |을 사용하여 AND 연산과 OR 연산을 할 수 있다.
-
예를 들어, "wt 계통" and "근부 건조 중량이 50 이상" and "지상부 건조 중량이 120 이상" 의 3 가지 조건을 동시에 충족시키는 행을 추출하려면 아래와 같이 작성한다.
-
또한 여러 조건을 쉼표로 구분하여 제공하는 경우 AND 연산의 결과완 동일하게 작용된다.
d.subset <- d %>% filter(variety == 'wt', root_dry_mass >= 50, shoot_dry_mass >= 120)
# d.subset <- d %>% filter(variety == 'wt' & root_dry_mass >= 50 & shoot_dry_mass >= 120)
head(d.subset)
## # A tibble: 4 x 7
## replicate block root_dry_mass shoot_dry_mass trt fert variety
## <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr>
## 1 1 1 56 132 F10 F10 wt
## 2 2 1 66 120 F10 F10 wt
## 3 6 1 66 125 F10 F10 wt
## 4 8 2 67 122 F10 F10 wt
-
wt 계통에서 "뿌리 부분 건조 중량이 50 이상" 또는 "지상부 건조 중량이 120 이상"의 조건을 만족하는 행을 추출하려면 아래와 같이 작성한다.
d.subset <- d %>% filter(variety == 'wt', root_dry_mass >= 50 | shoot_dry_mass >= 120)
# d.subset <- d %>% filter(variety == 'wt' & (root_dry_mass >= 50 | shoot_dry_mass >= 120))
head(d.subset)
## # A tibble: 6 x 7
## replicate block root_dry_mass shoot_dry_mass trt fert variety
## <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr>
## 1 1 1 56 132 F10 F10 wt
## 2 2 1 66 120 F10 F10 wt
## 3 4 1 43 134 F10 F10 wt
## 4 5 1 55 119 F10 F10 wt
## 5 6 1 66 125 F10 F10 wt
## 6 8 2 67 122 F10 F10 wt
-
다른 예로서, 처리 군으로부터 F10 이외의 행을 추출 할 때는 아래와 같이 !를 입력하면 된다.
# d.subset <- d %>% filter(!(fert == 'F10'))
d.subset <- d %>% filter(fert != 'F10')
head(d.subset)
## # A tibble: 6 x 7
## replicate block root_dry_mass shoot_dry_mass trt fert variety
## <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr>
## 1 1 1 12 45 NH4Cl NH4Cl wt
## 2 2 1 20 60 NH4Cl NH4Cl wt
## 3 3 1 21 87 NH4Cl NH4Cl wt
## 4 4 1 15 57 NH4Cl NH4Cl wt
## 5 5 1 5 26 NH4Cl NH4Cl wt
## 6 6 1 18 78 NH4Cl NH4Cl wt
[dplyr::arrange 함수]
-
arrange함수는 주어진 조건에 따라 행을 정렬한다.
-
데이터에 결측값인 NA가 포함 된 경우 arrange함수를 사용하여 정렬 할 때 오름차순 · 내림차순에 상관없이 결 측값 NA는 항상 데이터 세트의 하단에 정렬된다.
-
예를 들어, rice 데이터에 대한 근부 건조 중량을 기준으로 오름차순으로 정렬하려면 arrange 함수에 열 이름root_dry_mass을 지정하면 된다.
d.subset <- d %>% arrange(root_dry_mass)
head(d.subset)
## # A tibble: 6 x 7
## replicate block root_dry_mass shoot_dry_mass trt fert variety
## <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr>
## 1 7 2 1 35 NH4Cl +ANU843 NH4Cl ANU843
## 2 10 2 3 5 F10 +ANU843 F10 ANU843
## 3 2 1 4 6 F10 +ANU843 F10 ANU843
## 4 3 1 4 3 F10 +ANU843 F10 ANU843
## 5 1 1 4 22 NH4Cl +ANU843 NH4Cl ANU843
## 6 5 1 5 26 NH4Cl NH4Cl wt
-
뿌리 부분 건조 중량을 기준으로 내림차순으로 정렬하려면 desc 함수를 이용하거나 열 이름에 -을 붙이면 된다.
# d.subset <- d %>% arrange(-root_dry_mass)
d.subset <- d %gt;% arrange(desc(root_dry_mass))
head(d.subset)
## # A tibble: 6 x 7
## replicate block root_dry_mass shoot_dry_mass trt fert variety
## <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr>
## 1 8 2 67 122 F10 F10 wt
## 2 2 1 66 120 F10 F10 wt
## 3 6 1 66 125 F10 F10 wt
## 4 1 1 56 132 F10 F10 wt
## 5 5 1 55 119 F10 F10 wt
## 6 11 2 44 37 F10 F10 wt
-
다음 뿌리 부분 건조 중량에 대하여 내림차순으로 지상부 건조 중량에 관해서는 오름차순으로 정렬되어 때 filter함수와 마찬가지로 여러 조건을 순서대로 주면된다.
-
filter함수에 여러 조건을 대입하면 왼쪽의 조건이 우선된다.
d.subset <- d %>% arrange(desc(root_dry_mass), shoot_dry_mass)
head(d.subset)
## # A tibble: 6 x 7
## replicate block root_dry_mass shoot_dry_mass trt fert variety
## <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr>
## 1 8 2 67 122 F10 F10 wt
## 2 2 1 66 120 F10 F10 wt
## 3 6 1 66 125 F10 F10 wt
## 4 1 1 56 132 F10 F10 wt
## 5 5 1 55 119 F10 F10 wt
## 6 11 2 44 37 F10 F10 wt
-
지금까지 소개 한 select함수, filter함수 및 arrange함수를 결합하여 데이터 세트를 유연하게 조작 할 수있다. 예를 들어 다음과 같은 작업도 쉽게 할 수있다
-
계통이 wt 행을 추출하고
-
rice 데이터에서 처리 (fert), 뿌리 부분 건조 중량 (root_dry_mass) 지상부 건조 중량 (shoot_dry_mass)의 4 열을 추출하여
-
단계 1-2에서 추출한 일부를 근부 건조 중량을 기준으로 내림차순으로 정렬
-
-
이와 같은 작업을 수행하는 경우 아래와 같이 작성한다.
wt.subset <- d %>%
filter(variety == 'wt') %>%
select(fert, root_dry_mass, shoot_dry_mass) %>%
arrange(desc(root_dry_mass))
head(wt.subset)
## # A tibble: 6 x 3
## fert root_dry_mass shoot_dry_mass
## <chr> <dbl> <dbl>
## 1 F10 67 122
## 2 F10 66 120
## 3 F10 66 125
## 4 F10 56 132
## 5 F10 55 119
## 6 F10 44 37
[dplyr::group_by 함수]
-
group_by 함수는 주어진 조건에 따라 데이터를 여러 그룹으로 나눌 때 사용하는 함수이다.
-
group_by 함수에서 처리 한 결과를 print도, group_by함수의 처리 전과 처리 후와는 외형적으로는 변하지 않는다.
-
그러나 group_by 함수에서 처리 한 후 데이터 세트에는 그룹 정보가 속성으로 저장된다.
-
예를 들어, rice 데이터 세트에 대해 각 계통별로 그룹화하는 경우 아래와 같이 작성한다.
head(d)
## # A tibble: 6 x 7
## replicate block root_dry_mass shoot_dry_mass trt fert variety
## <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr>
## 1 1 1 56 132 F10 F10 wt
## 2 2 1 66 120 F10 F10 wt
## 3 3 1 40 108 F10 F10 wt
## 4 4 1 43 134 F10 F10 wt
## 5 5 1 55 119 F10 F10 wt
## 6 6 1 66 125 F10 F10 wt
d.grouped <- d %>% group_by(variety)
head(d.grouped)
## # A tibble: 6 x 7
## # Groups: variety [1]
## replicate block root_dry_mass shoot_dry_mass trt fert variety
## <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr>
## 1 1 1 56 132 F10 F10 wt
## 2 2 1 66 120 F10 F10 wt
## 3 3 1 40 108 F10 F10 wt
## 4 4 1 43 134 F10 F10 wt
## 5 5 1 55 119 F10 F10 wt
## 6 6 1 66 125 F10 F10 wt
-
group_by함수에서 추가 된 그룹 정보를 삭제하려면 ungroup 함수를 사용한다.
d.grouped <- d %>% group_by(variety)
d.ungrouped <- d.grouped %>% ungroup()
[dplyr::summarise 함수]
-
summarise함수는 데이터의 집계하는 함수에서 group_by함수 등과 함께 사용되는 경우가 많다.
-
예를 들어, rice 데이터 세트에 대해 각 계통마다 뿌리 부분 건조 중량 및 지상부 건조 무게의 평균치를 구해하려면 먼저 variety 열을 기준으로 그룹화하고, 이어 근부 건조 중량 및 지상부 건조 무게 열에 집계 처리 (평균값 등의 계산)를 수행한다.
d.massave <- d %>%
group_by(variety) %>%
summarise(root_dry_mass_ave = mean(root_dry_mass),
shoot_dry_mass_ave = mean(shoot_dry_mass))
head(d.massave)
## # A tibble: 2 x 3
## variety root_dry_mass_ave shoot_dry_mass_ave
## <chr> <dbl> <dbl>
## 1 ANU843 9.67 41.8
## 2 wt 26.5 77.3
-
각 계통의 각 처리 군에 대해 평균을 구하는 경우는 group_by 거리에 조건을 쓴다.
d.massave <- d %>%
group_by(variety, fert) %>%
summarise(root_dry_mass_ave = mean(root_dry_mass),
shoot_dry_mass_ave = mean(shoot_dry_mass))
head(d.massave)
## # A tibble: 6 x 4
## # Groups: variety [2]
## variety fert root_dry_mass_ave shoot_dry_mass_ave
## <chr> <chr> <dbl> <dbl>
## 1 ANU843 F10 6 7.33
## 2 ANU843 NH4Cl 9.17 46.6
## 3 ANU843 NH4NO3 13.8 71.5
## 4 wt F10 49.5 108.
## 5 wt NH4Cl 12.6 50.2
## 6 wt NH4NO3 17.3 73.3
-
summarise에서 사용되는 mean함수는 R의 표준 함수이다. 따라서 결측치를 무시하고 평균 값을 구하려면 아래와 같이 쓰면 좋다.
d.massave <- d %>%
group_by(variety, fert) %>%
summarise(root_dry_mass_ave = mean(root_dry_mass, na.rm = TRUE),
shoot_dry_mass_ave = mean(shoot_dry_mass, na.rm = TRUE))
head(d.massave)
## # A tibble: 6 x 4
## # Groups: variety [2]
## variety fert root_dry_mass_ave shoot_dry_mass_ave
## <chr> <chr> <dbl> <dbl>
## 1 ANU843 F10 6 7.33
## 2 ANU843 NH4Cl 9.17 46.6
## 3 ANU843 NH4NO3 13.8 71.5
## 4 wt F10 49.5 108.
## 5 wt NH4Cl 12.6 50.2
## 6 wt NH4NO3 17.3 73.3
-
summarise중간에서 사용하는 함수를 직접 정의 할 수도 있다.
-
예를 들어, 사 분위 범위 (IQR)를 요구하는 함수 calc.IQR를 직접 정의하여 그것을 summarise 안에서 사용하는 경우에는 아래와 같이 작성한다.
calc.IQR <- function(x) {
q1 <- quantile(x, probs = 0.25)
q3 <- quantile(x, probs = 0.75)
iqr <- q3 - q1
return(iqr)
}
d.massave <- d %>%
group_by(variety, fert) %>%
summarise(root_dry_mass_IQR = calc.IQR(root_dry_mass),
shoot_dry_mass_IQR = calc.IQR(shoot_dry_mass))
head(d.massave)
## # A tibble: 6 x 4
## # Groups: variety [2]
## variety fert root_dry_mass_IQR shoot_dry_mass_IQR
## <chr> <chr> <dbl> <dbl>
## 1 ANU843 F10 2.25 4
## 2 ANU843 NH4Cl 2.5 23.2
## 3 ANU843 NH4NO3 8 25.8
## 4 wt F10 17.8 17.2
## 5 wt NH4Cl 11 19.2
## 6 wt NH4NO3 8 24
[dplyr::mutate 함수]
-
mutate함수는 기존 데이터에 새 열을 추가하고자 할 때 사용한다.
-
예를 들어, 근부 건조 중량 및 지상부 건조 중량의 합을 계산하여 그것을 dry_mass 열 이름에서 기존 데이터에 추가하고, 뿌리 부분 건조 중량이 건조 중량 전체의 비율을 root_dry_mass_ratio 열 이름에서 기존 데이터에 추가 하려면 아래와 같이 작성한다.
d.new <- d %>% mutate(dry_mass = root_dry_mass + shoot_dry_mass,
root_dry_mass_ratio = root_dry_mass / dry_mass)
head(d.new)
## # A tibble: 6 x 9
## replicate block root_dry_mass shoot_dry_mass trt fert variety dry_mass
## <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr> <dbl>
## 1 1 1 56 132 F10 F10 wt 188
## 2 2 1 66 120 F10 F10 wt 186
## 3 3 1 40 108 F10 F10 wt 148
## 4 4 1 43 134 F10 F10 wt 177
## 5 5 1 55 119 F10 F10 wt 174
## 6 6 1 66 125 F10 F10 wt 191
## # … with 1 more variable: root_dry_mass_ratio <dbl>
-
새로 만든 열 이름은 그대로 두고 새로운 데이터 원한다면 mutate함수 대신 transmute함수를 사용한다.
-
이렇게 하면 기존의 열 이름을 남길 수 있다.
d.new <- d %>% transmute(variety,
dry_mass = root_dry_mass + shoot_dry_mass,
root_dry_mass_ratio = root_dry_mass / dry_mass)
head(d.new)
## # A tibble: 6 x 3
## variety dry_mass root_dry_mass_ratio
## <chr> <dbl> <dbl>
## 1 wt 188 0.298
## 2 wt 186 0.355
## 3 wt 148 0.270
## 4 wt 177 0.243
## 5 wt 174 0.316
## 6 wt 191 0.346
참고 문헌
[논문]
- 없음
[보고서]
- 없음
[URL]
- 없음
문의사항
[기상학/프로그래밍 언어]
- sangho.lee.1990@gmail.com
[해양학/천문학/빅데이터]
- saimang0804@gmail.com
본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'프로그래밍 언어 > R' 카테고리의 다른 글
[R] 서울대 통계 연구소 R을 이용한 빅데이터 분석 교육 연수 (0) | 2020.05.12 |
---|---|
[R] KLAPS 수치예측 모델 자료를 이용하여 내삽 방법 (Multi level B-Spline Approximation, Kriging)에 따른 전처리 및 가시화 (0) | 2020.04.14 |
[R] R을 이용한 통계 분석 및 데이터 시각화 : readr (0) | 2020.04.09 |
[R] R을 이용한 통계 분석 및 데이터 시각화 : tidyr (0) | 2020.04.08 |
[R] R을 이용한 통계 분석 및 데이터 시각화 : ggplot2 (유효숫자 표시) (0) | 2020.04.07 |
최근댓글