Chỉ cần tự hỏi nếu có một cách hiệu quả để làm outer joins với bảng dữ liệu nhưbên ngoài tham gia data.table R
a <- data.table(a=c(1,2,3),b=c(3,4,5))
b <- data.table(a=c(1,2),k=c(1,2))
merge(a,b,by="a",all.x=T)
này hoạt động tốt, nhưng nó không phải là hiệu quả như các bên tham gia với dữ liệu lớn hơn , như sau chạy rất nhanh, nhưng ở trên là rất chậm.
setkey(a,a)
setkey(b,a)
a[b,]
Trong trường hợp đầu tiên, 'a' và' b' được bỏ khóa nên 'merge' sẽ cần phải khóa chúng đầu tiên (như bản sao cục bộ (loại) bên trong hợp nhất vì nó không muốn thay đổi' a' và ' b' trong phạm vi gọi). Trong trường hợp thứ hai, bạn đã sẵn lòng thay đổi 'a' và' b' bằng cách khóa chúng (bạn có bao gồm thời gian để làm điều đó không?) Và sau đó 'a [b]' là nhanh. Nhưng ngay cả như vậy tôi ngạc nhiên có một sự khác biệt lớn. 'merge' _should_ có thể so sánh được với' x [y] '. Vui lòng nêu rõ thông tin phiên bản khi nói về thời gian: bạn có đang sử dụng phiên bản v1.8.6 không? Và cũng "của bạn rất nhanh" và "rất chậm" có thể là ý tưởng của tôi về "tương tự"! Thời gian thực tế là gì? –
Rất dễ dàng để đánh giá sai/không phù hợp, vì vậy chúng tôi chắc chắn cần xem phương pháp định thời gian của bạn trước khi nói bất cứ điều gì. –
Tôi không thể cung cấp thời gian cho điều này như là một trong những đầu tiên phát nổ trong bộ nhớ và bị rơi phiên R (tham gia khoảng 19m dòng). Tôi sẽ điểm chuẩn nó với một tập hợp nhỏ hơn và đăng kết quả. (phiên bản 1.8.2, tôi đang sử dụng) – jamborta