gpt4 book ai didi

r - 计算数据框中(长)周末的天数

转载 作者:行者123 更新时间:2023-12-01 12:03:08 27 4
gpt4 key购买 nike

我有以下数据框:

DAYS7 <- c('Monday','Tuesday','Wednesday','Thursday','Friday', 'Saturday', 'Sunday')   
DAYS <- rep(DAYS7,5)
A <- c(0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,1,1)
B <- c(0,0,0,0,0,1,2,0,0,0,0,1,2,3,0,0,0,0,1,2,3,4,5,0,0,1,2,3,0,0,0,0,0,1,2)
DESIRED_OUTPUT <- c(2,2,2,2,2,2,2,3,3,3,3,3,3,3,5,5,5,5,5,5,5,5,5,3,3,3,3,3,2,2,2,2,2,2,2)
dataframe <- as.data.frame(cbind(DAYS, A, B, DESIRED_OUTPUT))

如果是工作日,A 列 中的相应单元格为零。如果是假期,A 列 显示 1。(请注意,可能会有长周末,例如第 12 行、第 19 行、第 22-23 行!)B 列 本质上是A 列 的累积总和,条件是只要出现零,累积就会重置。我打算做的是计算每个周末的长度(以天为单位),然后将结果打印到像这样的附加列中(参见 DESIRED_OUTPUT 列):
enter image description here

在 Excel 中相对容易……
enter image description here

…但我正在努力在 R 中找到合适的解决方案。有什么建议吗?

最佳答案

棘手的部分是定义一个星期,它是一组 0,然后是一组 1。我们可以使用 rle 来做到这一点,完成后我们可以将其用作 ave 中的分组变量,并使用 sum

with(dataframe, ave(A, with(rle(A == 0), rep(cumsum(values), lengths)), FUN = sum))
#[1] 2 2 2 2 2 2 2 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5 3 3 3 3 3 2 2 2 2 2 2 2

因为 BA 的累加和,我们也可以在这里使用它并计算组中的 max 值。

with(dataframe, ave(B, with(rle(A == 0), rep(cumsum(values), lengths)), FUN = max))

关于r - 计算数据框中(长)周末的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60055950/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com