使用 Rreactable
包中,我试图使用两个 groupBy 变量显示标记读数的百分比。在较低级别的分组中,这是计算正确的百分比。但在分组的第二(外部)级别上,它没有显示正确的百分比。
这是数据:
dat <- structure(list(Date = structure(c(1592611200, 1592611200, 1592611200,
1592611200, 1592697600, 1592697600,
1592697600, 1592697600, 1592784000,
1592784000, 1592784000, 1592784000,
1592870400, 1592870400, 1592870400,
1592870400, 1592956800, 1592956800,
1592956800, 1592956800, 1593043200,
1593043200, 1593043200, 1593043200,
1593129600, 1593129600, 1593129600,
1593129600, 1593216000, 1593216000,
1593216000, 1593216000, 1593302400,
1593302400, 1593302400, 1593302400,
1593388800, 1593388800, 1593388800,
1593388800),
tzone = "UTC", class = c("POSIXct", "POSIXt")),
variable = c("Incoming Reading 1", "Outgoing Reading 1", "Incoming Reading 2", "Outgoing Reading 2", "Incoming Reading 1",
"Outgoing Reading 1", "Incoming Reading 2", "Outgoing Reading 2", "Incoming Reading 1", "Outgoing Reading 1",
"Incoming Reading 2", "Outgoing Reading 2", "Incoming Reading 1", "Outgoing Reading 1", "Incoming Reading 2",
"Outgoing Reading 2", "Incoming Reading 1", "Outgoing Reading 1", "Incoming Reading 2", "Outgoing Reading 2",
"Incoming Reading 1", "Outgoing Reading 1", "Incoming Reading 2", "Outgoing Reading 2", "Incoming Reading 1",
"Outgoing Reading 1", "Incoming Reading 2", "Outgoing Reading 2", "Incoming Reading 1", "Outgoing Reading 1",
"Incoming Reading 2", "Outgoing Reading 2", "Incoming Reading 1", "Outgoing Reading 1", "Incoming Reading 2",
"Outgoing Reading 2", "Incoming Reading 1", "Outgoing Reading 1", "Incoming Reading 2", "Outgoing Reading 2"),
reading = c(60, 55, 60, 72,
61, 56, 60, 71,
62, 55, 61, 72,
61, 54, 60, 71,
62, 53, 60, 72,
61, 52, 59, 71,
60, 51, 60, 72,
62, 50, 60, 71,
61, 55, 61, 72,
62, 56, 60, 70),
in_spec = c (1, 1, 1, 1,
1, 1, 1, 1,
1, 1, 1, 1,
1, 1, 1, 1,
1, 0, 1, 1,
1, 0, 0, 1,
1, 0, 1, 1,
1, 0, 1, 1,
1, 1, 1, 1,
1, 1, 1, 1),
category = c("reading_1", "reading_1", "reading_2", "reading_2",
"reading_1", "reading_1", "reading_2", "reading_2",
"reading_1", "reading_1", "reading_2", "reading_2",
"reading_1", "reading_1", "reading_2", "reading_2",
"reading_1", "reading_1", "reading_2", "reading_2",
"reading_1", "reading_1", "reading_2", "reading_2",
"reading_1", "reading_1", "reading_2", "reading_2",
"reading_1", "reading_1", "reading_2", "reading_2",
"reading_1", "reading_1", "reading_2", "reading_2",
"reading_1", "reading_1", "reading_2", "reading_2")),
row.names = c(NA, -40L), class = c("tbl_df", "tbl", "data.frame"))
在该数据中,1in_spec
列表示读数在可接受的范围内。如果为0,则超出指定范围。当数据进入时,它会被标记为符合或不合格。
这是我到目前为止的代码:
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"))
Here is the current output:
在 Reading_1 和 Reading_2 类别中,每个变量都显示符合规格的读数的正确百分比。然而,在最外层,每个类别都没有计算我需要的百分比。在每个类别中,我希望它计算符合规格的读数总数和读数总数。然后应将总规格除以读数总数。
在此示例中,第一组 (reading_1) 有 16 个符合规格的读数和 20 个总读数,因此我希望它显示 0.8。第二组 (reading_2) 有 19 个符合规格的读数和 20 个总读数,因此我希望它显示 0.95。
我认为编写自定义聚合函数是解决此问题的正确方法,但我不确定。我愿意dplyr
解决方案之外reactable
打电话,但我不想失去个人的阅读价值,所以总结可能行不通。