Post
새소식
- Chirpy Theme 7.2.0 업데이트

data.table in R

data.table in R

들어가기

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
    
    flights[1:2] %>% 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
This post is licensed under CC BY 4.0 by the author.