Xử lý dữ liệu với data.table trong R
Matt Dowle, Arun Srinivasan
Instructors, DataCamp
Giả sử bạn muốn đổi hàng thứ 2 của cột "y" thành 10
df <- data.frame(x = 1:5, y = 6:10)
df
x y
1 6
2 7
df$y[2] <- 10
Trong R < v3.1.0, thao tác này dẫn đến sao chép sâu toàn bộ data.frame
# nội bộ xảy ra trước R v3.1.0
tmp <- <deep copy of "df">
tmp$y[2] <- 10
df <- tmp
Ở v3.1.0, đã cải tiến để chỉ sao chép sâu cột được cập nhật
Trong ví dụ này, chỉ các cột a và b được sao chép sâu trong thao tác trên df bên dưới
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 cập nhật cột tại chỗ, tức là theo tham chiếu
Nghĩa là bạn không cần gán kết quả lại cho một biến
Không tạo bản sao cột nào khi thay đổi giá trị
data.table dùng toán tử mới := để thêm/cập nhật/xóa cột theo tham chiếu
batrips[, c("is_dur_gt_1hour", "week_day") := list(duration > 3600, wday(start_date))]# Khi thêm một cột, không cần dấu ngoặc kép batrips[, is_dur_gt_1hour := duration > 3600]
batrips[, `:=`(is_dur_gt_1hour = NULL,
start_station = toupper(start_station))]
Xử lý dữ liệu với data.table trong R