들어가기
data.table 패키지는 다음과 같은 이점을 제공한다.
- 간결하고 일관된 구문
- 인지적 부담없이 유동적으로 분석
- 빠르고 효율적인 코드 생성 사용할 데이터는 NYC-flights14로 2014년 뉴욕시 공항에서 출발한 모든 정시 항공편 데이터를 포함한다.
1
2
3
4
5
6
7
8
9
| library(data.table)
library(dplyr)
input <- if (file.exists("flights14.csv")) {
"flights14.csv"
} else {
"https://raw.githubusercontent.com/Rdatatable/data.table/master/vignettes/flights14.csv"
}
flights <- fread(input)
flights %>% head %>% print
|
소개
기본
data.table
R 언어에서 데이터를 저장하는 자료 구조인 data.frame을 개선한 버전이다. fread()
함수를 이용하여 파일에서 데이터를 읽어 오거나 data.table()
함수를 이용하여 직접 생성할 수 도 있다. 이미 존재하는 데이터가 있다면 as.data.table()
함수를 통해 형 변환도 가능하다.
1
2
3
4
| DT = data.table( ID = c("b","b","b","a","a","c"),
a = 1:6, b = 7:12,
c = 13:18 )
print(DT)
|
일반적인 형태
1
2
3
| DT[i, j, by]
## R: i j by
## SQL: where | order by select | update group by
|
- i, 조건에 맞는 행을 선별적으로 선택
- j, 컬럼 선택
- by, 그룹 단위로 처리
조건에 맞는 행 선택
조건에 맞는 행 선택
1
2
| ans <- flights[origin == "JFK" & month == 6L]
ans %>% head %>% print
|
첫 두행 선택
행 정렬
1
2
| ans <- flights[order(origin, -dest)]
head(ans) %>% print
|
열 선택
벡터로 반환
1
| flights[, arr_delay] %>% head %>% print
|
data.table로 반환
1
2
3
4
| flights[, "arr_delay"] %>% head %>% print
flights[, list(arr_delay, dep_delay)] %>% head %>% print
flights[, .(arr_delay, dep_delay)] %>% head %>% print
flights[, c(arr_delay, dep_delay)] %>% head %>% print
|
컬럼명 변경
1
| flights[, .(delay_arr = arr_delay, delay_dep = dep_delay)] %>% head %>% print
|
열 계산
1
| flights[, sum((arr_delay + dep_delay) < 0 )]
|
행 조건에 따른 열 계산
1
2
3
| flights[origin == "JFK" & month == 6L,
.(m_arr = mean(arr_delay),
m_dep = mean(dep_delay))]
|
.N 변수
1
| flights[origin == "JFK" & month == 6L, .N]
|
.N
은 현재 조건을 만족하는 행 개수를 담고 있는 변수이다.
외부 변수를 이용한 열 선택
1
2
3
4
| all_cols <- colnames(flights)
selected_cols <- all_cols[c(4,5)]
flights[1:4, ..selected_cols] %>% print
# flights[1:4, selected_cols, with=F]
|
열 제거
1
2
| flights[, !c("arr_delay", "dep_delay")] %>% head %>% print
# flights[, -c("arr_delay", "dep_delay")] %>% head %>% print
|
집계
그룹화
by 인자를 통한 그룹화
1
| flights[, .(.N), by = .(origin)] %>% print
|
행 조건에 맞는 그룹화
1
| flights[carrier == "AA", .N, by = origin] %>% print
|
조건에 따른 집계
1
2
3
4
| flights[carrier == "AA",
.(mean(arr_delay), mean(dep_delay)),
by = .(origin, dest, month)] %>%
head %>% print
|
keyby를 이용한 정렬
그룹화 및 정렬
1
2
3
| flights[carrier == "AA",
.(mean(arr_delay), mean(dep_delay)),
keyby = .(origin, dest, month)] %>% print
|
Chaining
1
2
3
4
5
6
| DT[ ... ][ ... ][ ... ]
or
DT[ ...
][ ...
][ ...
]
|
1
| flights[carrier == "AA", .N, by = .(origin, dest)][order(origin, -dest)] %>% head %>% print
|
by 인자 표현
1
| flights[, .N, .(dep_delay>0, arr_delay>0)] %>% print
|
subset을 나타내는 변수 .SD
1
2
3
4
5
| flights[carrier == "AA", ## Only on trips with carrier "AA"
lapply(.SD, mean), ## compute the mean
by = .(origin, dest, month), ## for every 'origin,dest,month'
.SDcols = c("arr_delay", "dep_delay")] %>% ## for just those specified in .SDcols
print
|
참고자료
- 원본 사이트 - https://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.html