Tôi có một data.table
như:R data.table: nhóm trọng phần trăm của nhóm
library(data.table)
widgets <- data.table(serial_no=1:100,
color=rep_len(c("red","green","blue","black"),length.out=100),
style=rep_len(c("round","pointy","flat"),length.out=100),
weight=rep_len(1:5,length.out=100))
Mặc dù tôi không chắc chắn đây là data.table
cách mà hầu hết, tôi có thể tính toán tần số phân nhóm theo nhóm sử dụng table
và length
trong một bước-- ví dụ, để trả lời câu hỏi "Phần trăm vật dụng màu đỏ là gì?"
chỉnh sửa: mã này không cung cấp câu trả lời đúng
# example A
widgets[, list(style = unique(style),
style_pct_of_color_by_count =
as.numeric(table(style)/length(style))), by=color]
# color style style_pct_of_color_by_count
# 1: red round 0.32
# 2: red pointy 0.32
# 3: red flat 0.36
# 4: green pointy 0.32
# ...
Nhưng tôi không thể sử dụng phương pháp đó để trả lời những câu hỏi như "Bằng cách cân, bao nhiêu phần trăm của các widget đỏ có hình tròn?" Tôi chỉ có thể đưa ra một cách tiếp cận hai bước:
# example B
widgets[,list(cs_weight=sum(weight)),by=list(color,style)][,list(style, style_pct_of_color_by_weight=cs_weight/sum(cs_weight)),by=color]
# color style style_pct_of_color_by_weight
# 1: red round 0.3466667
# 2: red pointy 0.3466667
# 3: red flat 0.3066667
# 4: green pointy 0.3333333
# ...
Tôi đang tìm kiếm một phương pháp duy nhất bước đến B, và A nếu có thể làm tốt thêm, trong một lời giải thích rằng đào sâu sự hiểu biết của tôi về data.table
cú pháp cho by- hoạt động nhóm. Xin lưu ý rằng câu hỏi này khác với Weighted sum of variables by groups with data.table vì tôi liên quan đến các nhóm con và tránh nhiều bước. TYVM.
Nhìn vào phản hồi từ @Frank dưới đây tôi nhận thấy rằng nỗ lực của tôi A không chỉ là vụng về nhưng không chính xác - ví dụ, tôi đã kiểm tra 'widget [, sum (style == "round" & color == "red")/sum (color == "red")] # 0.36' – C8H10N4O2