In [2]:
library(dplyr)
library(MASS)
In [3]:
head(Boston)
str(Boston)
In [4]:
# 데이터의 형태를 바꾼다. 이렇게 바꾸면 큰 데이터 프레임을 보기 쉽도록 해 준다.
# print() 시 한 페이지에 해당하는 데이터만 보여주는 기능외에는 특별한 기능은 없음
my.data = tbl_df(Boston)
head(my.data)
In [11]:
# filter(데이터명, 조건식)
head(filter(my.data,
rad == 4),
n = 3)
In [10]:
# 논리 연산자를 사용해서 조건을 늘려갈 수 있다.
head(filter(my.data,
rad == 1 & (tax<200|tax>300)),
n = 3)
In [15]:
# sort(vector에 사용)
# order(data.table 패키지 => 데이터 프레임에 사용)
# dplyr 에는 arrange를 통해 정렬 가능
# 기본적으로 오름차순
head(arrange(my.data,
age, # 첫 번째 조건 age
tax), # 두 번째 조건 tax
n = 3)
head(arrange(my.data,
desc(age)), # age를 기준으로 내림차순
n = 3)
In [22]:
# select : 원하는 변수 선택
# R 기본 제공 형태가 subset이었나...?
head(dplyr::select(my.data,
nox, rm),
n = 3)
# :을 사용해서 선택하고자 하는 변수의 범위를 지정해주어도 된다.
head(dplyr::select(my.data,
nox:dis),
n = 3)
In [23]:
# start_with('문자') => 문자로 시작하는 변수 select
head(dplyr::select(my.data,
starts_with('c')),
n = 3)
# 정규표현식을 이용한 변수 select
# matches('정규표현식')
# matches('^[cd]') => c or d로 시작하는 변수를 select
head(dplyr::select(my.data,
matches('^[cd]')),
n = 3)
# -matches('^[cd]') => c or d로 시작하는 변수를 제외하고 select
head(dplyr::select(my.data,
-matches('^[cd]')),
n = 3)
In [25]:
# zn 변수명을 Z.N으로 변경
head(rename(my.data,
Z.N=zn),
n = 3)
In [29]:
# 새로운 변수(column) 삽입 => mutate
# 2*age한 값을 twice.age 변수로 추가
# sqrt(twice.age)한 값을 new.col 변수로 추가
head(mutate(my.data,
twice.age = 2*age,
new.col = sqrt(twice.age)),
n = 3)
In [30]:
# transmute
# mutate와 비슷하지만 새롭게 추가된 변수만 결과로 반환
head(transmute(my.data,
twice.age = 2*age,
new.col = sqrt(twice.age)),
n = 3)
In [31]:
# na값을 제외한 age의 평균을 계산해서 mean.age에 넣어줌)
# group_by와 같이 사용해서 group별 연산 결과를 데이터로 삽입 가능
summarise(my.data,
mean.age = mean(age, na.rm = TRUE))
In [35]:
# 데이터 슬라이싱
# 2:6(2,3,4,5,6) , 8 에 해당하는 row(데이터) 출력
slice(my.data, c(2:6,8))
# 마지막 row(데이터) 출력
slice(my.data, n())
In [42]:
# distint() : 중복된 row를 제거해서 데이터 출력
# R 기본 기능 unique와 동일하지만 c언어 기반으로 구현되어 있어서 속도가 빠름
# Cars93 데이터로 살펴보자
distinct(Cars93, Origin)
distinct(Cars93, Type)
distinct(Cars93, Origin, Type)
In [47]:
# n개의 데이터 sampling
sample_n(my.data, 3)
# n%의 데이터 sampling
sample_frac(my.data, .01)
# n%의 데이터 복원추출
sample_frac(my.data, .01,
replace = TRUE)
In [53]:
# jupyter에서는 %>% 단축키((ctrl + shift + m)) 사용이 불가능 한 것 같다...
# group_by(tax) => tax 별로 grouping해서
# sumamrise(count = n(), mean.age = mean(age,na.rm = TRUE)
# => 각 tax별 count와 age의 평균을 계산
result.1 = my.data %>%
group_by(tax) %>%
summarise(count = n(),
mean.age = mean(age, na.rm = TRUE))
head(result.1, n = 3)
In [58]:
# Cars93 데이터가 보기 편할 것 같다...
# count : Type별 개수
# diff.type : 중복을 제거한 Type 개수
# first : Type별 RPM의 첫번째 데이터
# last : Type별 RPM의 마지막 데이터
result.2 = Cars93 %>%
group_by(Type) %>%
summarise(count = n(),
diff.type = n_distinct(Type),
first.tax=first(RPM),
last.tax=last(RPM))
head(result.2, n = 3)
In [75]:
# tax, rad 2개의 변수를 이용하여 그룹핑
result.3 = my.data %>%
group_by(tax, rad) %>%
summarise(size = n())
head(result.3)
In [96]:
date=c("2014-01-01" ,"2014-01-01" ,"2014-01-01" ,
"2014-01-01" ,"2014-01-02" ,"2014-01-02" ,
"2014-01-02" ,"2014-01-03" ,"2014-01-03" ,"2014-01-03")
alpabet=c("a","a","b","c","d","e","a","a","d","c")
df = data.frame(date, alpabet)
df
In [102]:
# dumplicated() 함수는 중복된 데이터일 경우 TRUE 아니면 FALSE를 반환하는 함수
# !dumplicated()를 사용시 중복된 데이터가 삭제됨
df %>%
arrange(date) %>% # date 기준으로 오름차순
filter(!duplicated(number)) %>% # 중복된 알파벳 제거
group_by(date) %>% # date로 그룹핑해서
summarise(count = length(date))%>% # count : 각 date 원소 개수
mutate(cumsum = cumsum(count)) # cumsum : count의 누적합