11. 벡터연산( df[ df$aa == , ] / dplyr - filter(df, 칼럼명)함수로 필터링하기
setwd('c:/users/is2js/R_da/')
#### 데이터 준비 ####
data("airquality")
df = airquality
#### 1. 단순 필터링(인덱싱, 벡터연산) ####
df_sub = df[1:4, ] # 전체에서 뽑아낼 때, 뒤에 _sub라는 접미사를 붙히는 버릇을 가지자.
df_sub
df[df$Day == 1, ]
df[df$Day != 1, ]
df[df$Day <= 2, ]
# 2개이상의 조건시 [()&(), ]
df[(df$Day == 1) & (df$Day == 2), ]
df[(df$Day == 1) | (df$Day == 2), ]
#### 2. %in% 연산자를 활용한 필터링 ####
# - %in% 1:2 1 or 2 포함 -> | 연산자를 여러개 사용할 필요가 없어진다.
# - 결과는 T / F 의 논리 연산자로 나옴. 앞에 !( )를 붙힐 수 있다. -> 행의 갯수를 nrow()할 필요없이 sum()으로도 바로 출력가능하다.
# %in%를 이용하여 or를 대신하기****
df$Day %in% 1:2 #조건문(mask개념)이다. --> TRUE or FALSE
df[df$Day %in% 1:2, ]
# 해당 조건을 만족하는 셀때는 nrow( %in% )한것을 할 필요 없이 sum()으로 바로 할 수 있다.
# row의 개수 빠르게 세기
sum(df$Day %in% 1:2) # %in%의 결과는 T/F이므로 sum은 1만 더해진 것이다. 값의 합이 아님.
#### 3. subset() 함수를 이용한 필터링 ####
# - 되도록이면 벡터연산(인덱싱)으로 해결하자.
# - subset(df, 조건문, select = c(컬럼명1, 컬럼명2)) # -컬럼명 : 해당 컬럼 제외 모든 컬럼
# - ***subset의 장점 : 칼럼명1:칼럼명3 으로 칼럼이름으로 연속하게 뽑아낼 수 있긴하다...
# - 사용하지말자
#### 4. dplyr패키지 - filter()함수로 필터링 : 조건문에 $없이 칼럼명만 사용(대신 자동완성x)한다. #####
# - filter(df, 단순칼럼명의 조건문)
# - dplyr는 속도가 빠르고 신뢰할만한 패키지다(bindr cpp -> c++을 사용하기 때문에)
install.packages("dplyr")
library("dplyr")
df = airquality
# 칼럼명만 변수처럼 바로 입력해서 조건문을 입력****
# - df$Day형태가 아니라 자동완성은 안되는 단점
filter(df, Day == 1)
filter(df, Day == 1 & Month == 5)
filter(df, Day %in% c(1, 3, 6)) # *** 1:3의 범위 뿐만 아니라 c(1, 2, 3)형태로 이산으로도 바로 or를 적용시킬 수 있다.!!!****
'한의대 생활 > └ R studio 중급 문법' 카테고리의 다른 글
13. 결측치(Missing value) 처리 - df[ is.na( ), ] 활용 / summary()함수 (0) | 2018.12.29 |
---|---|
12. 이상치(Outliers) 확인 - df[ , ]에 order() 인덱싱 / quantile() 활용하기 / ggplot / boxplot (0) | 2018.12.29 |
10. 사용자 정의 함수( 기초 + 응용) (0) | 2018.12.29 |
9. beyond for loop - apply() MARGIN=1,2로 FUN=통계class확인 / sapply() 세로 특화 / ifelse(기준칼럼으로 조건문, y, n)로 값 할당 (0) | 2018.12.29 |
8. R reshape2패키지를 활용한 Pivoting (0) | 2018.12.29 |