59doit
[ R ] dplyr 패키지 활용 #2 본문
반응형
(4) 컬럼으로 데이터 정렬
- 데이터 셋의 특정 컬럼을 기준으로 오름차순 또는 내림차순으로 정렬하는 arrange()함수 사용
- arrange(dataframe, 컬럼1, 컬럼2, …) #default는 오름차순
- arrange(dataframe, desc(컬럼1, …)) #desc()함수로 지정하는 경우 내림차순
ex ) 단일 객체의 오름차순 정렬
library(dplyr) csvgrade <- read.csv("C:/grade_csv.csv") csvgrade %>% arrange(math) # id class math eng sci # 1 2 2 20 60 80 # 2 5 2 40 30 90 # 3 1 1 50 50 70 # 4 4 3 50 80 90 # 5 10 1 60 80 60 # 6 3 3 80 70 90 # 7 6 2 80 90 80 # 8 8 3 80 90 70 # 9 7 1 90 90 70 # 10 9 2 90 60 50 |
- 오름차순으로 데이터를 정렬하여 추출
ex ) 단일 객체의 내림차순 정렬
library(dplyr) csvgrade <- read.csv("C:/grade_csv.csv") csvgrade %>% arrange(desc(math)) # id class math eng sci # 1 7 1 90 90 70 # 2 9 2 90 60 50 # 3 3 3 80 70 90 # 4 6 2 80 90 80 # 5 8 3 80 90 70 # 6 10 1 60 80 60 # 7 1 1 50 50 70 # 8 4 3 50 80 90 # 9 5 2 40 30 90 # 10 2 2 20 60 80 |
- arrange 함수를 이용하여 데이터를 내림차순으로 정렬하여 추출하려면 기준 객체에 desc 함수를 적용한다.
- 내림차순으로 데이터를 정렬하여 추출한다.
ex ) 다중 객체의 오름차순 정렬
library(dplyr) csvgrade <- read.csv("C:/grade_csv.csv") csvgrade %>% arrange(class, math) # id class math eng sci # 1 1 1 50 50 70 # 2 10 1 60 80 60 # 3 7 1 90 90 70 # 4 2 2 20 60 80 # 5 5 2 40 30 90 # 6 6 2 80 90 80 # 7 9 2 90 60 50 # 8 4 3 50 80 90 # 9 3 3 80 70 90 # 10 8 3 80 90 70 |
- arrange 함수를 이용하여 다중 객체의 데이터를 ,(콤마)로 기준으로 오름차순으로 정렬하며 추출한다.
- 여러 객체의 데이터를 오름차순으로 정렬하여 추출한다
ex ) hglights_df를 대상으로 데이터 정렬
arrange(hflights_df, Year, Month, DepTime, ArrTime) # Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum TailNum # <int> <int> <int> <int> <int> <int> <chr> <int> <chr> # 1 2011 1 1 6 1 621 CO 1542 N76254 # 2 2011 1 21 5 4 46 XE 2956 N13997 # 3 2011 1 4 2 5 59 OO 1118 N745SK # 4 2011 1 27 4 11 216 CO 209 N17730 # 5 2011 1 27 4 17 240 XE 2771 N11565 # 6 2011 1 9 7 22 117 WN 55 N506SW # 7 2011 1 28 5 226 310 XE 2956 N11535 # 8 2011 1 18 2 537 829 DL 1248 N302NB # 9 2011 1 25 2 538 824 DL 1248 N355NB # 10 2011 1 7 5 538 832 DL 1248 N337NB |
- 오름차순 정렬 시 우선순위는 가장 왼쪽의 컬럼부터 시작하여 오른쪽 컬럼 순으로 정렬
- 파이프 연산자를 사용하여 hflights_df 데이터 셋에 arrange()함수 적용
- hflights_df %>% arrange(Year, Month, DepTime, AirTime)
(5) 컬럼으로 데이터 검색
- 데이터 셋의 특정 컬럼을 기준으로 데이터 검색 시 select()함수
- select(dataframe, 컬럼1, 컬럼2, …)
- select 함수는 추출하고자 하는 객체를 할당하면 해당 객체만 추출한다.
ex ) 단일 객체
library(dplyr) csvgrade <- read.csv("C:/grade_csv.csv") csvgrade %>% select(math) # math # 1 50 # 2 20 # 3 80 # 4 50 # 5 40 # 6 80 # 7 90 # 8 80 # 9 90 # 10 60 |
- 단일 객체를 추출하여 반환한다.
ex ) 다중 객체
library(dplyr) csvgrade <- read.csv("C:/grade_csv.csv") csvgrade %>% select(class, math) # class math # 1 1 50 # 2 2 20 # 3 3 80 # 4 3 50 # 5 2 40 # 6 2 80 # 7 1 90 # 8 3 80 # 9 2 90 # 10 1 60 |
- select 함수의 인자에 ,(콤마)를 활용하여 여러 객체를 추출한다.
- 여러 객체를 추출하여 반환한다.
ex ) 객체 제외
library(dplyr) csvgrade <- read.csv("C:/grade_csv.csv") csvgrade %>% select(-math) # id class eng sci # 1 1 1 50 70 # 2 2 2 60 80 # 3 3 3 70 90 # 4 4 3 80 90 # 5 5 2 30 90 # 6 6 2 90 80 # 7 7 1 90 70 # 8 8 3 90 70 # 9 9 2 60 50 # 10 10 1 80 60 |
- select 함수의 인자에 -(마이너스) 연산자를 활용하여 객체 제외하고 추출한다.
- 객체 제외하고 추출하여 반환한다.
ex ) %>% 함수 적용
- %>% 함수를 적용하여 함수를 조합하여 구현한다.
- %>% 함수를 적용하면 코드의 길이가 줄어들어 이해하기도 쉽고 실행하는데 불필요한 부분이 줄어들어 시간이 단축된다.
# 특정 객체의 값을 추출한다.
library(dplyr) csvgrade <- read.csv("C:/grade_csv.csv") csvgrade %>% filter(class == 1 ) %>% select(eng) # eng # 1 50 # 2 90 # 3 80 |
# 특정 객체의 값 일부를 추출한다
library(dplyr) csvgrade <- read.csv("C:/grade_csv.csv") csvgrade %>% select(id, math) %>% head(3) # id math # 1 1 50 # 2 2 20 # 3 3 80 |
ex ) hflights_df를 대상으로 지정된 컬럼 데이터 검색
select(hflights_df, Year, Month, DepTime, ArrTime) # Year Month DepTime ArrTime # <int> <int> <int> <int> # 1 2011 1 1400 1500 # 2 2011 1 1401 1501 # 3 2011 1 1352 1502 # 4 2011 1 1403 1513 # 5 2011 1 1405 1507 # 6 2011 1 1359 1503 # 7 2011 1 1359 1509 # 8 2011 1 1355 1454 # 9 2011 1 1443 1554 # 10 2011 1 1443 1553 |
- hflights_df %>% select(hflights_df, Year, Month, DepTime, AirTime)
ex ) hflights_df 대상 컬럼의 범위로 검색
select(hflights_df, Year:ArrTime) # Year Month DayofMonth DayOfWeek DepTime ArrTime # <int> <int> <int> <int> <int> <int> # 1 2011 1 1 6 1400 1500 # 2 2011 1 2 7 1401 1501 # 3 2011 1 3 1 1352 1502 # 4 2011 1 4 2 1403 1513 # 5 2011 1 5 3 1405 1507 # 6 2011 1 6 4 1359 1503 # 7 2011 1 7 5 1359 1509 # 8 2011 1 8 6 1355 1454 # 9 2011 1 9 7 1443 1554 # 10 2011 1 10 1 1443 1553 |
- select()함수 사용시 특정 컬럼만이 아닌 컬럼의 범위 설정 가능
- 검색조건으로 시작걸럼:종료컬럼 형식으로 컬럼 범위의 시작과 끝을 지정
- 특정 컬럼 또는 컬럼의 범위를 검색에서 제외하려는 경우 제외하려는 컬럼 이름 또는 범위 앞에 “-“속성을 지정
(6) 데이터셋에 컬럼 추가
- 데이터 셋에 특정 컬럼을 추가하는 mutate()함수
- mutate(dataframe, 컬럼명1=수식1, 컬럼명2=수식2, …)
ex ) hflights_df에서 출발 지연시간과 도착 지연시간의 차이를 계산한 컬럼 추가
mutate(hflights_df, gain = ArrTime - DepTime, gain_per_hour = gain / (AirTime / 60)) # Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum TailNum # <int> <int> <int> <int> <int> <int> <chr> <int> <chr> # 1 2011 1 1 6 1400 1500 AA 428 N576AA # 2 2011 1 2 7 1401 1501 AA 428 N557AA # 3 2011 1 3 1 1352 1502 AA 428 N541AA # 4 2011 1 4 2 1403 1513 AA 428 N403AA # 5 2011 1 5 3 1405 1507 AA 428 N492AA # 6 2011 1 6 4 1359 1503 AA 428 N262AA # 7 2011 1 7 5 1359 1509 AA 428 N493AA # 8 2011 1 8 6 1355 1454 AA 428 N477AA # 9 2011 1 9 7 1443 1554 AA 428 N476AA # 10 2011 1 10 1 1443 1553 AA 428 N504AA |
ex ) mutate()함수에 의해 추가된 컬럼 보기
select(mutate(hflights_df, gain = ArrDelay - DepDelay, gain_per_hour = gain / (AirTime / 60)), Year, Month, ArrDelay, DepDelay, gain, gain_per_hour) # Year Month ArrDelay DepDelay gain gain_per_hour # <int> <int> <int> <int> <int> <dbl> # 1 2011 1 -10 0 -10 -15 # 2 2011 1 -9 1 -10 -13.3 # 3 2011 1 -8 -8 0 0 # 4 2011 1 3 3 0 0 # 5 2011 1 -3 5 -8 -10.9 # 6 2011 1 -7 -1 -6 -8 # 7 2011 1 -1 -1 0 0 # 8 2011 1 -16 -5 -11 -16.5 # 9 2011 1 44 43 1 1.46 # 10 2011 1 43 43 0 0 |
- console창 크기 이외의 컬럼명 확인이 어려운 경우 select()함수 안에 mutate()함수 사용
(7) 요약통계 구하기
- 데이터 셋에 특정 컬럼을 대상으로 기술통계량을 계산하는 summarise() 함수
- summarise(dataframe, 추가할 컬럼명 = 함수(컬럼명), …)
- 컬럼의 평균과 같이 컬럼을 요약한 통계량을 구할 때는 summarise 함수와 group_by 함수를 사용한다.
- 구한 결과를 요약표로 만들면 컬럼의 집단 간에 어떤 차이가 있고 어떤 분포를 갖는지 쉽게 파악할 수 있다.
- 그룹으로 나눈 데이터는 다른 분석에도 사용할 수 있으므로 활용도가 매우 높다.
- 전체의 평균, 표준편차, 사분위수 등 전체적인 값들에 대한 요약 통계량을 산출할 때는 summary 함수를 사용하고, 개별 컬럼의 데이터에 대한 요약 통계량을 구할 때는 summarise 함수를 사용한다.
ex ) 컬럼 데이터의 요약 통계량을 반환한다
library(dplyr) csvgrade <- read.csv("C:/grade_csv.csv") csvgrade %>% summarise(mean_math = mean(math)) # mean_math # 1 64 |
ex ) hflights_df에서 비행시간의 평균 구하기
summarise(hflights_df, avgAirTime = mean(AirTime, na.rm = TRUE)) # avgAirTime # <dbl> # 1 108 hflights_df %>% summarise(avgAirTime = mean(AirTime, na.rm = TRUE)) # avgAirTime # <dbl> # 1 108 |
- mean()함수를 사용하여 평균을 계산하여 avgAirTime변수에 저장
- 뒤의 결과 값은 같다
ex ) hflights_df 의 관측치 길이 구하기
summarise(hflights_df, cnt = n(), delay = mean(AirTime, na.rm = TRUE)) # cnt delay # <int> <dbl> # 1 227496 108. |
- n()함수: 데이터 셋의 관측치 길이를 구하는 함수
ex ) 도착시간(AirTime)의 표준편차와 분산 계산
summarise(hflights_df, arrTimeSd = sd(ArrTime, na.rm = TRUE), arrTimeVar = var(ArrTime, na.rm = T)) # arrTimeSd arrTimeVar # <dbl> <dbl> # 1 472. 223163. |
(8) 집단변수 대상 그룹화
- 데이터 셋 내 범주형 컬럼을 대상으로 그룹화하는 group_by()함수 사용
- group_by(dataframe, 집단변수) group_by
- 함수에 객체를 지정하면 컬럼별로 분리한다.
ex ) 컬럼의 집단별 평균 요약 통계량
library(dplyr) csvgrade <- read.csv("C:/grade_csv.csv") csvgrade %>% group_by(class) %>% summarise(mean_math = mean(math)) # class mean_math # <int> <dbl> # 1 1 66.7 # 2 2 57.5 # 3 3 70 |
- 컬럼의 집단별 평균에 대한 요약 통계량을 반환한다.
- group_by 함수는 인자로 범주형 변수가 포함된 컬럼명을 인자로 받아 요약 통계량을 계산
ex ) 컬럼의 집단별 다중 요약 통계량
library(dplyr) csvgrade <- read.csv("C:/grade_csv.csv") csvgrade %>% group_by(class) %>% summarise(mean_math = mean(math), sum_math = sum(math), median_math = median(math)) # class mean_math sum_math median_math # <int> <dbl> <int> <dbl> # 1 1 66.7 200 60 # 2 2 57.5 230 60 # 3 3 70 210 80 |
- 컬럼의 집단별 다중 요약 통계량을 반환한다
ex ) 집단변수를 이용하여 그룹화
species <- group_by(iris, Species) str(species) # grouped_df [150 x 5] (S3: grouped_df/tbl_df/tbl/data.frame) # $ Sepal.Length: num [1:150] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... # $ Sepal.Width : num [1:150] 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... # $ Petal.Length: num [1:150] 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... # $ Petal.Width : num [1:150] 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... # $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ... # - attr(*, "groups")= tibble [3 x 2] (S3: tbl_df/tbl/data.frame) # ..$ Species: Factor w/ 3 levels "setosa","versicolor",..: 1 2 3 # ..$ .rows : list<int> [1:3] # .. ..$ : int [1:50] 1 2 3 4 5 6 7 8 9 10 ... # .. ..$ : int [1:50] 51 52 53 54 55 56 57 58 59 60 ... # .. ..$ : int [1:50] 101 102 103 104 105 106 107 108 109 110 ... # .. ..@ ptype: int(0) # ..- attr(*, ".drop")= logi TRUE species # Sepal.Length Sepal.Width Petal.Length Petal.Width Species # <dbl> <dbl> <dbl> <dbl> <fct> # 1 5.1 3.5 1.4 0.2 setosa # 2 4.9 3 1.4 0.2 setosa # 3 4.7 3.2 1.3 0.2 setosa # 4 4.6 3.1 1.5 0.2 setosa # 5 5 3.6 1.4 0.2 setosa # 6 5.4 3.9 1.7 0.4 setosa # 7 4.6 3.4 1.4 0.3 setosa # 8 5 3.4 1.5 0.2 setosa # 9 4.4 2.9 1.4 0.2 setosa # 10 4.9 3.1 1.5 0.1 setosa |
반응형
'Programming > R' 카테고리의 다른 글
[ R ]reshape2 패키지 활용 (0) | 2022.11.20 |
---|---|
[ R ] dplyr 패키지 활용 #3 (0) | 2022.11.19 |
[ R ] dplyr 패키지 활용 #1 (0) | 2022.11.19 |
[ R ] 주요 내장함수 (0) | 2022.11.18 |
[ R ] 함수의 정의 (0) | 2022.11.18 |
Comments