R data.table: gewichteter Prozentsatz der Untergruppe der Gruppe
Ich habe eindata.table
mögen
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) )
Obwohl ich nicht sicher bin, ob dies das meiste istdata.table
Weise kann ich Subgruppenhäufigkeit nach Gruppe mit @ berechntable
undlength
in einem einzigen Schritt - zum Beispiel, um die Frage zu beantworten: "Wie viel Prozent der roten Widgets sind rund?"
bearbeiten dieser Code liefert nicht die richtige Antwort
# 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
# ...
Aber ich kann diesen Ansatz nicht verwenden, um Fragen wie "Nach Gewicht, wie viel Prozent der roten Widgets sind rund?" Zu beantworten. Ich kann mir nur einen zweistufigen Ansatz einfallen lassen:
# 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
# ...
Ich suche nach einer einstufigen Herangehensweise an B und A, wenn sie verbesserungsfähig ist, in einer Erklärung, die mein Verständnis von @ vertiefdata.table
-Syntax für gruppenweise Operationen. Bitte beachten Sie, dass sich diese Frage von @ unterscheideGewichtete Summe der Variablen nach Gruppen mit data.table weil meins Untergruppen beinhaltet und mehrere Schritte vermeidet. TYVM.