R의 data.table로 데이터 조작하기
Matt Dowle, Arun Srinivasan
Instructors, DataCamp
열 "y"의 2번째 행 값을 10으로 변경하려 한다고 가정합니다.
df <- data.frame(x = 1:5, y = 6:10)
df
x y
1 6
2 7
df$y[2] <- 10
R v3.1.0 이전에는 이 작업 시 전체 data.frame이 깊은 복사(deep copy)되었습니다.
# what happens internally prior to R v3.1.0
tmp <- <deep copy of "df">
tmp$y[2] <- 10
df <- tmp
v3.1.0에서 업데이트된 열만 깊은 복사하도록 개선되었습니다.
아래 df 연산에서는 열 a와 b만 깊은 복사됩니다.
df <- data.frame(a = 1:3, b = 4:6, c = 7:9, d = 10:12)
df[1:2] <- lapply(df[1:2], function(x) ifelse(x%%2, x, NA))
df
a b c d
1 NA 7 10
NA 5 8 11
3 NA 9 12
data.table은 열을 제자리에서(in place), 즉 참조로 업데이트합니다.
결과를 변수에 다시 할당할 필요가 없습니다.
값 변경 시 어떤 열도 복사되지 않습니다.
data.table은 새 연산자 :=를 사용하여 열을 참조로 추가/업데이트/삭제합니다.
batrips[, c("is_dur_gt_1hour", "week_day") := list(duration > 3600, wday(start_date))]# When adding a single column quotes aren't necessary batrips[, is_dur_gt_1hour := duration > 3600]
batrips[, `:=`(is_dur_gt_1hour = NULL,
start_station = toupper(start_station))]
R의 data.table로 데이터 조작하기