繁体   English   中英

如何选择每组中总和为最小值的行窗口并在R中绘图?

[英]How to select the window of rows which sum to a minimum value in each group and plot in R?

我想将 df 中的一列分成组,并为每个组内的列 (Online_h) 中的每 36 个连续行运行类似 rollsum() 之类的操作,然后选择这些行,其中总和是组内的最小值(与组内其余部分的总和)。 这意味着对于每个组,与其他组相比,我应该得到 36 行的总和。

我的数据框包括“Date”、“Online_h”和“week”三列。 列“week”用于对数据进行分组。 应根据“Online_h”中的值计算每 36 个连续行的总和为最小值的行。

df 看起来像这样: Tha 数据框

我当前的代码如下所示:

df %>%
  group_by(week) %>%
  mutate(df$SumsofOnline <- rollapply(Online_h, width = 36, sum)) %>%
  select(min(SumsofOnline))

此代码根据“周”中的标签对数据进行正确分组,但在滚动应用后无法获取行。 我认为原因是因为 rollapply 只给出已经是计算总和的数字,但我需要在 Online_h 中获得 36 行,条件是每个组中的总和最小(group_by(week))。

收到值后,我需要为每个组绘制一个条形图并突出显示这些日期,其中 Online_h 中的 36 个连续值与其他连续和相比是最小值。 对于情节,我一直在使用此代码,但由于选择未正确完成而未完成。

df%>%
  ggplot(aes(x = Date, y = Online_h)) +
      geom_bar(stat = "identity") +
      facet_grid(rows = vars(week) )

为了突出显示,我想到了使用gghighlight().

非常感谢您的帮助。

我相信以下解决了问题的问题。

library(dplyr)

window <- 10  # test value
df %>%
  group_by(week) %>%
  mutate(Sums = zoo::rollapplyr(Online_h, width = window, sum, fill = NA)) %>%
  filter(Sums == min(Sums, na.rm = TRUE))
## A tibble: 3 x 3
## Groups:   week [3]
#  Online_h  week  Sums
#     <int> <int> <int>
#1       13    50   162
#2        6    51   184
#3       12    52   158

测试数据

set.seed(2021)
week = rep(50:52, sample(150:152))
n <- length(week)
df <- data.frame(
  Online_h = sample(50, n, TRUE),
  week
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM