问题描述
我使用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"))
这是当前输出:
在压力和温度类别中,每个变量都显示正确的规格内读数百分比。但是,在最外层,每个类别都没有计算我需要它的百分比。在每个类别中,我希望它计算合格检验的总数和读数的总数。然后应将总的合格样品除以读数的总数。
在此示例中,第一组(压力)具有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))