R data.table: porcentaje ponderado de subgrupo del grupo
tengo undata.table
me gusta:
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) )
Aunque no estoy seguro de que esto sea lo másdata.table
manera, puedo calcular la frecuencia de subgrupos por grupo usandotable
ylength
en un solo paso, por ejemplo, para responder la pregunta "¿Qué porcentaje de widgets rojos son redondos?"
editar: este código no proporciona la respuesta correcta
# 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
# ...
Pero no puedo usar ese enfoque para responder preguntas como "Por peso, ¿qué porcentaje de widgets rojos son redondos?" Solo puedo proponer un enfoque de dos pasos:
# 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
# ...
Estoy buscando un enfoque de un solo paso para B, y A si es mejorable, en una explicación que profundice mi comprensión dedata.table
sintaxis para operaciones por grupo. Tenga en cuenta que esta pregunta es diferente deSuma ponderada de variables por grupos con data.table porque el mío involucra subgrupos y evita múltiples pasos. TYVM.