2012-12-18 41 views
11

Có thể cập nhật nhiều hơn 1 cột dữ liệu. Có thể trong cùng một câu lệnh không?Cập nhật nhiều hơn một cột dữ liệu. Có thể

Something như

dt[,onecol:=1 anothercol:=2] 

Tôi đã nhìn thấy một số ví dụ nơi họ làm

dt[,c("onecol","anothercol"):=1] 

nhưng tôi không biết làm thế nào để gán công thức khác nhau cho mỗi cột

Trả lời

9

Vâng, đây đã có thể kể từ phiên bản 1.8.4:

library(data.table) 
dt <- data.table(a=1:4, b=4:1) 
dt[,c("a", "b") := list(min(a), max(b))] 
# dt 
# a b 
# 1: 1 4 
# 2: 1 4 
# 3: 1 4 
# 4: 1 4 

Hoặc làm điều tương tự một cách dễ đọc hơn:

dt <- data.table(a=1:4, b=4:1) 
dt[,`:=`(a = min(a), 
     b = max(a))] 
dt 
# a b 
# 1: 1 4 
# 2: 1 4 
# 3: 1 4 
# 4: 1 4 

Tìm kiếm the current data.table NEWS file cho "Nhiều LHS" để thấy rằng điều này cũng sẽ làm việc với một đối số by=.

+0

FWIW, trang trợ giúp '?": = "' Là một chút lỗi thời trong mô tả của nó về những gì có thể được thực hiện với ': ='. Phần "Ví dụ" của nó không bao gồm ví dụ về cú pháp được hiển thị ở đây và phần "Đối số" ngụ ý rằng điều này chỉ hoạt động khi 'with = FALSE'. –

Các vấn đề liên quan