【发布时间】:2016-04-04 13:10:05
【问题描述】:
我有一个数据框,该数据框已经根据需要进行了排序,但现在我想将其“切片”成组。
该组的最大累积值应为10。当累积值> 10时,应重置累积和并重新开始
library(dplyr)
id <- sample(1:15)
order <- 1:15
value <- c(4, 5, 7, 3, 8, 1, 2, 5, 3, 6, 2, 6, 3, 1, 4)
df <- data.frame(id, order, value)
df
这是我正在寻找的输出(我是“手动”完成的)
cumsum_10 <- c(4, 9, 7, 10, 8, 9, 2, 7, 10, 6, 8, 6, 9, 10, 4)
group_10 <- c(1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, 7)
df1 <- data.frame(df, cumsum_10, group_10)
df1
所以我有两个问题
- 如何创建一个累积变量,每次超过上限(本例中为 10)时都会重置
- 如何对每个组进行计数/分组
对于第一部分,我尝试了一些 group_by 和 cumsum 的组合,但没有运气
df1 <- df %>% group_by(cumsum(c(False, value < 10)))
我更喜欢管道 (%>%) 解决方案而不是 for 循环
谢谢
【问题讨论】:
-
如果你能弄清楚第一部分,第二部分将是微不足道的 (
group_by)。我认为如果没有for循环,将很难做到第一个,除非有人变得非常聪明。您想要管道以提高效率、优雅……吗?如果在辅助函数中隐藏了一个 for 循环,那可以吗? -
group_by(bin(value, 10))%>% mutate(cumsum(value))在链接中使用bin函数