data.table에서 행 필터링

R의 data.table로 데이터 조작하기

Matt Dowle and Arun Srinivasan

Instructors, DataCamp

data.table 구문의 일반 형식

첫 번째 인수 i는 행을 부분 선택 또는 필터링하는 데 사용됩니다

# General form of data.table syntax
DT[i, j, by]
   |  |  |
   |  |  --> grouped by what?
   |  -----> what to do?
   --------> on which rows?
R의 data.table로 데이터 조작하기

행 번호

# Subset 3rd and 4th rows from batrips
batrips[3:4]

# Same as
batrips[3:4, ]
# Subset everything except first five rows
batrips[-(1:5)] 

# Same as
batrips[!(1:5)]
R의 data.table로 데이터 조작하기

특수 기호 .N

  • .N은 data.table의 행 수를 담고 있는 정수 값입니다
  • i에서 nrow(x) 대신 유용하게 사용 가능
nrow(batrips) 
326339
batrips[326339]
trip_id duration
588914      364
# Returns the last row
batrips[.N] 
trip_id duration
588914      364
# Return all but the last 10 rows
ans <- batrips[1:(.N-10)] 
nrow(ans)
326329
R의 data.table로 데이터 조작하기

논리 표현식 (I)

# Subset rows where subscription_type is "Subscriber"
batrips[subscription_type == "Subscriber"]

# If batrips was only a data frame
batrips[batrips$subscription_type == "Subscriber", ]
R의 data.table로 데이터 조작하기

논리 표현식 (II)

# Subset rows where start_terminal = 58 and end_terminal is not 65
batrips[start_terminal == 58 & end_terminal != 65]

# If batrips was only a data frame
batrips[batrips$start_terminal == 58 & batrips$end_terminal != 65]
R의 data.table로 데이터 조작하기

논리 표현식 (III)

보조 인덱스를 사용하여 자동으로 속도 최적화

set.seed(1)
dt <- data.table(x = sample(10000, 10e6, TRUE), 
                 y = sample(letters, 1e6, TRUE))
indices(dt)
NULL
# 0.207s on first run 
#(time to create index + subset)
system.time(dt[x == 900])
user  system elapsed 
0.207   0.015   0.226 
indices(dt)
"x"
# 0.002s on subsequent runs
#(instant subset using index)
system.time(dt[x == 900])
user  system elapsed 
0.002   0.000   0.002
R의 data.table로 데이터 조작하기

연습해 봅시다!

R의 data.table로 데이터 조작하기

Preparing Video For Download...