Tôi có câu hỏi về thành phần data.table
cho "không tham gia", lấy cảm hứng từ số question của Iterator. Dưới đây là một ví dụ:không tham gia với data.tables
library(data.table)
dt1 <- data.table(A1=letters[1:10], B1=sample(1:5,10, replace=TRUE))
dt2 <- data.table(A2=letters[c(1:5, 11:15)], B2=sample(1:5,10, replace=TRUE))
setkey(dt1, A1)
setkey(dt2, A2)
Các data.table
s giống như thế này
> dt1 > dt2
A1 B1 A2 B2
[1,] a 1 [1,] a 2
[2,] b 4 [2,] b 5
[3,] c 2 [3,] c 2
[4,] d 5 [4,] d 1
[5,] e 1 [5,] e 1
[6,] f 2 [6,] k 5
[7,] g 3 [7,] l 2
[8,] h 3 [8,] m 4
[9,] i 2 [9,] n 1
[10,] j 4 [10,] o 1
Để tìm mà hàng trong dt2
có khóa tương tự trong dt1
, thiết lập which
tùy chọn để TRUE
:
> dt1[dt2, which=TRUE]
[1] 1 2 3 4 5 NA NA NA NA NA
Matthew đề xuất trong số answer, rằng thành ngữ "không tham gia"
dt1[-dt1[dt2, which=TRUE]]
để đặt số dt1
thành các hàng có chỉ mục không xuất hiện trong dt2
. Trên máy tính của tôi với data.table
v1.7.1 tôi nhận được một lỗi:
Error in `[.default`(x[[s]], irows): only 0's may be mixed with negative subscripts
Thay vào đó, với các tùy chọn nomatch=0
, "không tham gia" hoạt động
> dt1[-dt1[dt2, which=TRUE, nomatch=0]]
A1 B1
[1,] f 2
[2,] g 3
[3,] h 3
[4,] i 2
[5,] j 4
Đây có phải là ý định hành vi?
Chỉ cần thêm vào v1.8.3 là cú pháp _not-join_. Trong trường hợp này là 'dt1 [! Dt2]'. Sẽ thêm câu trả lời chi tiết ... –