多个组的可反应聚合函数

问题描述

我使用R self.cells = cupy.asarray(self.cells)包,尝试使用两个groupBy变量显示标记读数的百分比。在较低的分组级别,这是在计算正确的百分比。但是,在第二个(外部)分组级别上,它没有显示正确的百分比。

以下是数据:

import pyglet
from game_of_life import GameOfLife 
 
class Window(pyglet.window.Window):
 
    def __init__(self):
        super().__init__(800,800)
        self.gameOfLife = GameOfLife(self.get_size()[0],self.get_size()[1],15,# the lesser this value,more computation intensive will be
                                     0.5) 

        pyglet.clock.schedule_interval(self.update,1.0/24.0) # 24 frames per second
 
    def on_draw(self):
        self.clear()
        self.gameOfLife.draw()
        
    def update(self,dt):
        self.gameOfLife.run_rules()
 
if __name__ == '__main__':
    window = Window()
    pyglet.app.run()

在此数据中,reactable列中的1表示读数在可接受的范围内。如果为0,则超出指定范围。数据输入后,会被标记为不合格或不合格。

这是我到目前为止的代码

dat <- structure(list(Date = structure(c(1592611200,1592611200,1592697600,1592784000,1592870400,1592956800,1593043200,1593129600,1593216000,1593302400,1593388800,1593388800),tzone = "UTC",class = c("POSIXct","POSIXt")),variable = c("Incoming Pressure","Outgoing Pressure","Incoming Temperature","Outgoing Temperature","Incoming Pressure","Outgoing Temperature"),reading = c(60,55,60,72,61,56,71,62,54,53,52,59,51,50,70),in_spec = c (1,1,1),category = c("pressure","pressure","temperature","temperature")),row.names = c(NA,-40L),class = c("tbl_df","tbl","data.frame"))

这是当前输出

reactable example

在压力和温度类别中,每个变量都显示正确的规格内读数百分比。但是,在最外层,每个类别都没有计算我需要它的百分比。在每个类别中,我希望它计算合格检验的总数和读数的总数。然后应将总的合格样品除以读数的总数。

在此示例中,第一组(压力)具有16个规范内的读数和20个总读数,因此我希望它显示0.8。第二组(温度)具有19个规范内的读数和20个总读数,所以我希望它显示0.95。

我认为编写自定义聚合函数解决此问题的正确方法,但我不确定。我对in_spec之外的library(reactable) reactable(dat[,c("Date","variable","reading","category","in_spec")],columns = list(in_spec = colDef(name = "In Spec",aggregate = JS("function(values,rows) { var totalReadings = 0; var inSpecReadings = 0; rows.forEach(function(row) { if(row['in_spec'] == 1) { inSpecReadings += 1; } totalReadings += 1; }) return (inSpecReadings / totalReadings); }") ) ),groupBy = c("category","variable")) 解决方案持开放态度,但我不想失去个人的阅读价值,因此总结可能行不通。

解决方法

获得所需内容的一种简单方法就是将aggregate更改为"mean"

reactable(dat[,c("Date","variable","reading","category","in_spec")],columns = list(in_spec = colDef(name = "In Spec",aggregate = "mean")),groupBy = c("category","variable"))

如果要在dplyr中执行此操作,则必须具有两个不同的group_by语句和两个不同的变量。

dat %>% 
  group_by(category,variable) %>% 
  mutate(pct_var_in = mean(in_spec)) %>% 
  group_by(category) %>% 
  mutate(pct_cat_in = mean(in_spec))