[英]How to select rows by group with the minimum value and containing NAs in 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.