%in% | count&group_by
문제를 볼때 마다 어떤 구문을 사용할 지, 같은 결과가 나오는지 실험하면서
같은 결과를 가지는 R구문을 앞으로도 계속 정리해가겠습니다 :)
분명 저는 계속 까먹고 또 실수를 할거기 때문!
이번 글은 아래 두 가지 항목입니다
1. filter - %in% c() vs filter |
2. count() vs group_by
+ group_by + summarise 조건의 단수, 복수 차이
dplyr 패키지의 filter 항목은 전처리에서 없어선 안될 필수 구문입니다.
특히 복수의 조건을 부여하여 추출할 때 두 가지 방법을 사용할 수 있습니다.
이건 비슷한 구문이라기 보다는, 다른 방법 정도가 되겠습니다 :)
* mpg 내장 데이터를 사용하였습니다
다양한 조건을 부여하여 원하는 행만 추출할 때 | 혹은 다양한 조건 중 하나라도 만족할 때는 & 기호를 씁니다.
그 중에서, 이번에 비교할 것은 | 입니다.
" 제조사가 audi, honda, jeep인 데이터를 유일값으로 추출하라 "
mpg %>%
select(manufacturer) %>%
unique() %>%
filter(manufacturer == 'audi'| manufacturer == 'honda'| manufacturer == 'jeep')
이렇게 세 제조사에 해당되는 값을 뽑기 위해선, 번거롭게 ==를 반복 사용해야 합니다. 초보자인 저는 실험정신으로 아래 두 구문을 해봤는데 Error가 나오더군요 ㅎㅎ
filter(manufacturer == 'audi', 'honda', 'jeep')
filter(manufacturer == 'audi' | 'honda' | 'jeep')
SQL이 이런면에서는 전처리가 더 간편한 것 같습니다...
이 때 사용할 수 있는 구문은 %in% 함수 입니다.
mpg %>%
select(manufacturer) %>%
unique() %>%
filter(manufacturer %in% c('audi', 'honda', 'jeep'))
위의 == 반복구문을 사용한 것과 같은 결과가 나옵니다.
일반적으로 data.frame을 만들 때 c()로 다양한 값을 묶어 주듯
'==' 가 '%in% c()' 와 같은 문장이라고 할 수 있겠습니다.
* hflights 패키지의 내장데이터를 사용했습니다.
" 목적지별(Dest) 항공회수 빈도를 구하라 "
보통 ~별로 빈도를 구하는 문제에 직면했을 때, 저는 count() 와 group_by가 동시에 떠오릅니다.
둘을 같은 결과를 가지므로 같은 R 구문입니다.
위의 문제를 이 두 가지 언어로 작성하면,
hflights %>%
count(Dest)
이렇게 count함수를 사용하면 비교적 간단하게 Dest별 빈도 수를 구할 수 있습니다.
그러나 좀 더 다양한 조건이 필요할 경우에는 group_by + summarise 함수가 상세한 설명에 더 적합하다고 생각합니다!
group_by 와 summarise는 항상 같이 같이 쓰입니다. 위의 count와 같은 결과 값을 가지지만,
실제로 빈도수만 구해야하는 경우보다는 아래와 같이 이를 활용하거나 더 많은 정보도 같이 요하므로, summarise를 사용할 수 있는 group_by를 습관화 하는 것이 더 좋아 보입니다.( 주관,,,)
diamonds %>%
select(cut, color) %>%
group_by(cut, color) %>%
filter(cut %in% c('Premium','Ideal'),
color %in% c('D', 'E')) %>%
summarise(n = n(),
mean_price = mean(diamonds$price))
1. 단수 조건
" cut 범주별 " - group_by(cut)
아래 추출된 결과값을 보시면 범주별로 나눈 cut과 summarise에 조건을 부여한 빈도, 평균가로만 구성된 2X3 프레임을 확인하실 수 있습니다. filter에 추가로 부여한 color값은 보이지 않습니다.
2. 복수 조건
" cut 범주별 color를 분류하라 " - group_by(cut, color)
이번에는 color값이 보여야하는 조건이였습니다. filter값의 color 두가지 값도 동시에 추출되다 보니 행이 4개로 추가되었습니다.
위의 두 가지 차이를 확인하고, 상황에 맞는 값을 부여하면 되겠습니다!