R Select(), Filter(), Align(), 파이프라인(예제 포함)
dplyr이라는 라이브러리에는 데이터 세트 내부를 탐색하는 데 유용한 동사가 포함되어 있습니다. 이 튜토리얼에서는 이동 시간 데이터세트를 사용합니다. 데이터세트는 운전자가 집과 직장을 오가는 이동 경로에 대한 정보를 수집합니다. 데이터 세트에는 다음을 포함하여 XNUMX개의 변수가 있습니다.
- DayOfWeek: 운전자가 자동차를 사용하는 요일을 식별합니다.
- 거리: 여행의 총 거리
- MaxSpeed: 여행의 최대 속도
- TotalTime: 이동 시간(분)
데이터세트에는 약 200개의 관측값이 있으며, 탑승은 사이에 발생했습니다. Monday 금요일에.
우선, 다음을 수행해야 합니다.
- 데이터세트 로드
- 데이터의 구조를 확인하세요.
dplyr의 편리한 기능 중 하나는 looking() 기능입니다. 이는 str()에 비해 개선된 것입니다. laplign()을 사용하여 데이터세트의 구조를 확인하고 어떤 조작이 필요한지 결정할 수 있습니다.
library(dplyr) PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv" df <- read.csv(PATH) glimpse(df)
출력:
## Observations: 205 ## Variables: 14 ## $ X <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ... ## $ Date <fctr> 1/6/2012, 1/6/2012, 1/4/2012, 1/4/2012, 1/3/20... ## $ StartTime <fctr> 16:37, 08:20, 16:17, 07:53, 18:57, 07:57, 17:3... ## $ DayOfWeek <fctr> Friday, Friday, Wednesday, Wednesday, Tuesday,... ## $ GoingTo <fctr> Home, GSK, Home, GSK, Home, GSK, Home, GSK, GS... ## $ Distance <dbl> 51.29, 51.63, 51.27, 49.17, 51.15, 51.80, 51.37... ## $ MaxSpeed <dbl> 127.4, 130.3, 127.4, 132.3, 136.2, 135.8, 123.2... ## $ AvgSpeed <dbl> 78.3, 81.8, 82.0, 74.2, 83.4, 84.5, 82.9, 77.5,... ## $ AvgMovingSpeed <dbl> 84.8, 88.9, 85.8, 82.9, 88.1, 88.8, 87.3, 85.9,... ## $ FuelEconomy <fctr> , , , , , , -, -, 8.89, 8.89, 8.89, 8.89, 8.89... ## $ TotalTime <dbl> 39.3, 37.9, 37.5, 39.8, 36.8, 36.8, 37.2, 37.9,... ## $ MovingTime <dbl> 36.3, 34.9, 35.9, 35.6, 34.8, 35.0, 35.3, 34.3,... ## $ Take407All <fctr> No, No, No, No, No, No, No, No, No, No, No, No... ## $ Comments <fctr> , , , , , , , , , , , , , , , Put snow tires o...
이는 Comments 변수에 추가 진단이 필요하다는 것이 분명합니다. Comments 변수의 첫 번째 관측치는 누락된 값일 뿐입니다.
sum(df$Comments =="")
코드 설명
- sum(df$Comments ==""): df의 열 주석에서 ""와 동일한 관측치를 합산합니다.
출력:
## [1] 181
고르다()
select() 동사부터 시작하겠습니다. 모든 변수가 반드시 필요한 것은 아니며 관련성이 있다고 생각되는 변수만 선택하는 것이 좋습니다.
데이터 세트의 거의 181%에 해당하는 90개의 누락된 관측치가 있습니다. 제외하기로 결정하면 분석을 계속할 수 없습니다.
다른 가능성은 select() 동사를 사용하여 Comment 변수를 삭제하는 것입니다.
select()를 사용하면 다양한 방법으로 변수를 선택할 수 있습니다. 첫 번째 인수는 데이터 세트입니다.
- `select(df, A, B ,C)`: Select the variables A, B and C from df dataset. - `select(df, A:C)`: Select all variables from A to C from df dataset. - `select(df, -C)`: Exclude C from the dataset from df dataset.
Comments 변수를 제외하려면 세 번째 방법을 사용할 수 있습니다.
step_1_df <- select(df, -Comments) dim(df)
출력:
## [1] 205 14
dim(step_1_df)
출력:
## [1] 205 13
원본 데이터 세트에는 14개의 기능이 있고 step_1_df에는 13개의 기능이 있습니다.
필터()
filter() 동사는 관찰이 기준을 따르도록 하는 데 도움이 됩니다. filter()는 select()와 정확히 동일하게 작동합니다. 먼저 데이터 프레임을 전달한 다음 쉼표로 구분된 조건을 전달합니다.
filter(df, condition) arguments: - df: dataset used to filter the data - condition: Condition used to filter the data
하나의 기준
우선, 요인변수의 각 수준 내에서 관측치 수를 계산할 수 있습니다.
table(step_1_df$GoingTo)
코드 설명
- table(): 수준별로 관측치 수를 계산합니다. 참고: 요인 수준 변수만 허용됩니다.
- table(step_1_df$GoingTo): 최종 목적지까지의 이동 횟수를 셉니다.
출력:
## ## GSK Home ## 105 100
함수 테이블()은 105번의 라이딩이 GSK로 가고 100번의 라이딩이 집으로 가는 것을 나타냅니다.
데이터를 필터링하여 105개의 관측값이 있는 하나의 데이터세트와 100개의 관측값이 있는 다른 데이터세트를 반환할 수 있습니다.
# Select observations if GoingTo == Home select_home <- filter(df, GoingTo == "Home") dim(select_home)
출력:
## [1] 100 14
# Select observations if GoingTo == Work select_work <- filter(df, GoingTo == "GSK") dim(select_work)
출력:
## [1] 105 14
여러 기준
둘 이상의 기준으로 데이터세트를 필터링할 수 있습니다. 예를 들어 목적지가 집이고 수요일에 발생한 관측치를 추출할 수 있습니다.
select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday") dim(select_home_wed)
출력:
## [1] 23 14
23개의 관찰이 이 기준과 일치했습니다.
관로
데이터 세트를 생성하려면 다음과 같은 많은 작업이 필요합니다.
- 가져 오기
- 합병
- 선택
- 필터링
- 등
dplyr 라이브러리에는 %>%라는 실용적인 연산자가 함께 제공됩니다. 관로. 파이프라인 기능을 사용하면 조작이 깔끔하고 빠르며 오류 발생 가능성이 줄어듭니다.
이 연산자는 중간 단계를 하드 드라이브에 저장하지 않고 단계를 수행하는 코드입니다. 위의 예로 돌아가면 관심 있는 변수를 선택하여 필터링할 수 있습니다. 세 가지 단계가 있습니다.
- 1단계: 데이터 가져오기: GPS 데이터 가져오기
- 2단계: 데이터 선택: GoingTo 및 DayOfWeek 선택
- 3단계: 데이터 필터링: Home과 Wednesday만 반환
우리는 그것을 하기 위해 어려운 방법을 사용할 수 있습니다:
# Step 1 step_1 <- read.csv(PATH) # Step 2 step_2 <- select(step_1, GoingTo, DayOfWeek) # Step 3 step_3 <- filter(step_2, GoingTo == "Home", DayOfWeek == "Wednesday") head(step_3)
출력:
## GoingTo DayOfWeek ## 1 Home Wednesday ## 2 Home Wednesday ## 3 Home Wednesday ## 4 Home Wednesday ## 5 Home Wednesday ## 6 Home Wednesday
그것은 많은 작업을 수행하기에 편리한 방법이 아니며, 특히 단계가 많은 상황에서는 더욱 그렇습니다. 환경에는 많은 객체가 저장되게 됩니다.
대신 파이프라인 연산자 %>%를 사용합시다. 처음에 사용된 데이터 프레임만 정의하면 모든 프로세스가 거기서부터 흐를 것입니다.
파이프라인의 기본 구문
New_df <- df %>% step 1 %>% step 2 %>% ... arguments - New_df: Name of the new data frame - df: Data frame used to compute the step - step: Instruction for each step - Note: The last instruction does not need the pipe operator `%`, you don't have instructions to pipe anymore Note: Create a new variable is optional. If not included, the output will be displayed in the console.
위에 나열된 단계에 따라 첫 번째 파이프를 만들 수 있습니다.
# Create the data frame filter_home_wed.It will be the object return at the end of the pipeline filter_home_wed <- #Step 1 read.csv(PATH) % > % #Step 2 select(GoingTo, DayOfWeek) % > % #Step 3 filter(GoingTo == "Home",DayOfWeek == "Wednesday") identical(step_3, filter_home_wed)
출력:
## [1] TRUE
파이프라인 연산자를 사용하여 놀라운 데이터 세트를 만들 준비가 되었습니다.
마련하다()
. 이전 튜토리얼, sort() 함수를 사용하여 값을 정렬하는 방법을 알아봅니다. dplyr 라이브러리에는 정렬 기능이 있습니다. 파이프라인에서는 매력적으로 작동합니다. 배열() 동사는 하나 또는 여러 행을 오름차순(기본값) 또는 내림차순으로 재정렬할 수 있습니다.
- `arrange(A)`: Ascending sort of variable A - `arrange(A, B)`: Ascending sort of variable A and B - `arrange(desc(A), B)`: Descending sort of variable A and ascending sort of B
목적지별로 거리를 정렬할 수 있습니다.
# Sort by destination and distance step_2_df <-step_1_df %>% arrange(GoingTo, Distance) head<step_2_df)
출력:
## X Date StartTime DayOfWeek GoingTo Distance MaxSpeed AvgSpeed ## 1 193 7/25/2011 08:06 Monday GSK 48.32 121.2 63.4 ## 2 196 7/21/2011 07:59 Thursday GSK 48.35 129.3 81.5 ## 3 198 7/20/2011 08:24 Wednesday GSK 48.50 125.8 75.7 ## 4 189 7/27/2011 08:15 Wednesday GSK 48.82 124.5 70.4 ## 5 95 10/11/2011 08:25 Tuesday GSK 48.94 130.8 85.7 ## 6 171 8/10/2011 08:13 Wednesday GSK 48.98 124.8 72.8 ## AvgMovingSpeed FuelEconomy TotalTime MovingTime Take407All ## 1 78.4 8.45 45.7 37.0 No ## 2 89.0 8.28 35.6 32.6 Yes ## 3 87.3 7.89 38.5 33.3 Yes ## 4 77.8 8.45 41.6 37.6 No ## 5 93.2 7.81 34.3 31.5 Yes ## 6 78.8 8.54 40.4 37.3 No
요약
아래 표에서는 튜토리얼에서 배운 모든 연산을 요약했습니다.
동사 | 목표 | 암호 | 설명 |
---|---|---|---|
일견 | df의 구조를 확인하세요 |
glimpse(df) |
str()과 동일 |
고르다() | 변수 선택/제외 |
select(df, A, B ,C) |
변수 A, B, C를 선택합니다. |
select(df, A:C) |
A부터 C까지 모든 변수를 선택합니다. | ||
select(df, -C) |
C 제외 | ||
필터() | 하나 이상의 조건을 기반으로 df 필터링 |
filter(df, condition1) |
하나의 조건 |
filter(df, condition1 |
조건2) | ||
마련하다() | 하나 이상의 변수를 사용하여 데이터 세트 정렬 |
arrange(A) |
변수 A의 오름차순 정렬 |
arrange(A, B) |
변수 A와 B의 오름차순 정렬 | ||
arrange(desc(A), B) |
변수 A의 내림차순 정렬과 B의 오름차순 정렬 | ||
%>% | 각 단계 사이에 파이프라인 생성 |
step 1 %>% step 2 %>% step 3 |