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_old
và by =
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
?
Câu hỏi này thực sự chỉ là một FR. – eddi
@eddi FR là gì? – TARehman
FR = Yêu cầu tính năng – Jaap