Thêm và cập nhật cột theo tham chiếu

Xử lý dữ liệu với data.table trong R

Matt Dowle, Arun Srinivasan

Instructors, DataCamp

Nội bộ data.frame

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
Xử lý dữ liệu với data.table trong R

Nội bộ data.frame

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
  • Nếu muốn làm điều tương tự trên data.frame 10GB thì sao?
Xử lý dữ liệu với data.table trong R

Nội bộ data.frame

  • Ở 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
Xử lý dữ liệu với data.table trong R

Nội bộ data.table

  • 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

Xử lý dữ liệu với data.table trong R

Dạng LHS := RHS

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]
Xử lý dữ liệu với data.table trong R

Dạng hàm

batrips[, `:=`(is_dur_gt_1hour = NULL,                  
               start_station = toupper(start_station))] 
Xử lý dữ liệu với data.table trong R

Cùng luyện tập nào!

Xử lý dữ liệu với data.table trong R

Preparing Video For Download...