2016-06-08 16 views
5

Tôi đang sử dụng gói data.table để hoàn tất một số phân tích. Một trong các bước mà tôi đang thực hiện liên quan đến việc sử dụng hàm by = để có được thống kê tổng hợp. Tuy nhiên, tổng hợp phải được tính toán trên các kết quả duy nhất trong mỗi tập hợp con by. Tôi đã sử dụng unique và các khóa để đảm bảo rằng mỗi nhóm by bao gồm các bản ghi riêng biệt. Một cái gì đó mơ hồ như dưới đây:Trong data.table của R, làm thế nào là chìa khóa của một data.table được lưu giữ vào các tập con được tham chiếu bằng cách sử dụng .SD?

dt_new <- dt_old[,uFunc_MyFunction(x = unique(.SD)),by = grouping_var] 

tôi nhận thấy rằng chìa khóa trên .SD dường như khác nhau dựa trên các thiết lập quan trọng cho dt_oldby = tuyên bố. Rõ ràng, điều này có ảnh hưởng đến việc liệu các tập con kết quả của tôi là duy nhất hay không.

Tôi muốn hiểu rõ hơn, vì vậy tôi đã viết phần dưới đây.

library(data.table) 
set.seed(1554) 
dt_example <- data.table(id = 1:50, 
         site = sample(x = c("A","B","C"), 
             size = 50, 
             replace = TRUE, 
             prob = c(0.4,0.4,0.2)), 
         group = sample(x = c("Eta","Mu","Omicron","Psi"), 
             size = 50, 
             replace = TRUE), 
         team = sample(x = 1:3, 
             size = 50, 
             replace = TRUE, 
             prob = c(0.2,0.3,0.5))) 

setkey(x = dt_example, 
     group, 
     team) 

> dt_example[,as.list(key(.SD)),by = site] 
    site V1 V2 
1: B group team 
2: A group team 
3: C group team 

setkey(x = dt_example, 
     site, 
     group, 
     team) 

> dt_example[,as.list(key(.SD)),by = site] 
Empty data.table (0 rows) of 1 col: site 

Những gì tôi đang cố gắng để hiểu là tại sao, trong phiên bản đầu tiên, chìa khóa cho .SD là phù hợp, thời gian, trong phiên bản thứ hai, .SD không có chìa khóa ở tất cả. Tôi nghĩ rằng nó có một cái gì đó để làm với thực tế là các cột by = không trực tiếp bao gồm trong .SD, mà là phá vỡ chìa khóa, nhưng tôi muốn xác nhận logic của tôi. Vì vậy, câu hỏi của tôi là: tại sao tập hợp con của bảng dữ liệu, .SD, không có khóa khi một trong các cột chứa khóa của bảng dữ liệu gốc được sử dụng làm biến nhóm by?

+1

Câu hỏi này thực sự chỉ là một FR. – eddi

+0

@eddi FR là gì? – TARehman

+0

FR = Yêu cầu tính năng – Jaap

Trả lời

3

Trong trường hợp này, vì nó được sắp xếp theo site, group, team, trong khi nhóm theo site, khóa có thể được giữ lại cho group, team vì thứ tự sẽ được duy trì. Câu trả lời đơn giản nhất là chúng tôi dường như đã bỏ lỡ trường hợp này. Bạn có thể vui lòng gửi một vấn đề chỉ với một liên kết đến bài đăng này?

Là một công việc xung quanh, bạn có thể sử dụng đối số by trong phương pháp unique cho dữ liệu. Có thể chỉ định các cột.

Và như David chỉ ra, sử dụng unique(.SD) trên tất cả các nhóm dường như không cần thiết, nhưng đó có lẽ cho một Q.

+0

Tôi sẽ đăng sự cố trong giây lát. Và tôi đồng ý rằng 'duy nhất (.SD)' là một trường hợp sử dụng bất thường. Tôi thậm chí sẽ không thực sự mong đợi nó được "cố định" - chỉ là tò mò những gì đã xảy ra dưới mui xe. – TARehman

+1

Nộp trên Github là 1736. https://github.com/Rdatatable/data.table/issues/1736 – TARehman

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