gpt4 book ai didi

R 数据表 : subgroup weighted percent of group

转载 作者:行者123 更新时间:2023-12-04 10:05:21 25 4
gpt4 key购买 nike

我有一个 data.table喜欢:

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) )

虽然我不确定这是最多的 data.table方式,我可以使用 table 按组计算子组频率和 length只需一步——例如,回答“有多少红色小部件是圆形的?”的问题。

编辑:此代码未提供正确答案
# 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
# ...

但是我不能用这种方法来回答诸如“按重量计算,红色小部件有多少是圆形的?”之类的问题。我只能想出一个两步走的方法:
# 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
# ...

我正在寻找对 B 和 A(如果可以改进)的单步方法,以加深我对 data.table 的理解的解释。按组操作的语法。请注意,此问题与 Weighted sum of variables by groups with data.table 不同因为我的涉及子组并避免多个步骤。 TYVM。

最佳答案

这几乎是一个步骤:

# A
widgets[,{
totwt = .N
.SD[,.(frac=.N/totwt),by=style]
},by=color]
# color style frac
# 1: red round 0.36
# 2: red pointy 0.32
# 3: red flat 0.32
# 4: green pointy 0.36
# 5: green flat 0.32
# 6: green round 0.32
# 7: blue flat 0.36
# 8: blue round 0.32
# 9: blue pointy 0.32
# 10: black round 0.36
# 11: black pointy 0.32
# 12: black flat 0.32

# B
widgets[,{
totwt = sum(weight)
.SD[,.(frac=sum(weight)/totwt),by=style]
},by=color]
# color style frac
# 1: red round 0.3466667
# 2: red pointy 0.3466667
# 3: red flat 0.3066667
# 4: green pointy 0.3333333
# 5: green flat 0.3200000
# 6: green round 0.3466667
# 7: blue flat 0.3866667
# 8: blue round 0.2933333
# 9: blue pointy 0.3200000
# 10: black round 0.3733333
# 11: black pointy 0.3333333
# 12: black flat 0.2933333

工作原理:在进入更精细的组( colorcolor )以制表之前,为顶级组( style )构造分母。

备择方案。如 style s 在每个 color 内重复这仅用于显示目的,请尝试 table :
# A
widgets[,
prop.table(table(color,style),1)
]
# style
# color flat pointy round
# black 0.32 0.32 0.36
# blue 0.36 0.32 0.32
# green 0.32 0.36 0.32
# red 0.32 0.32 0.36

# B
widgets[,rep(1L,sum(weight)),by=.(color,style)][,
prop.table(table(color,style),1)
]

# style
# color flat pointy round
# black 0.2933333 0.3333333 0.3733333
# blue 0.3866667 0.3200000 0.2933333
# green 0.3200000 0.3333333 0.3466667
# red 0.3066667 0.3466667 0.3466667

对于 B,这会扩展数据,以便每个重量单位都有一个观测值。对于大数据,这样的扩展将是一个坏主意(因为它消耗太多内存)。另外, weight必须是整数;否则,它的总和将被静默地截断为 1(例如,尝试 rep(1,2.5) # [1] 1 1)。

关于R 数据表 : subgroup weighted percent of group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30944116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com