r - R:如果日期差小于 7,则按组从前一行添加值
问题描述
我有一个问题以某种方式结合了这两个问题(从前一行中减去日期(使用 R)并从前一行中减去值)。但无法设法让脚本工作。
我有一个看起来像这样的数据集:
id | date | min
1 | 2015-07-18 | 25
1 | 2015-07-22 | 15
1 | 2015-07-23 | 10
1 | 2015-07-30 | 15
2 | 2015-07-10 | 10
2 | 2015-07-16 | 20
2 | 2015-07-23 | 10
我想创建一个新列 totmin ,它通过 id 添加过去 7 天播放的总分钟数:
id | date | min | totmin
1 | 2015-07-18 | 25 | 25
1 | 2015-07-22 | 15 | 40
1 | 2015-07-23 | 10 | 50
1 | 2015-07-30 | 15 | 25
2 | 2015-07-10 | 10 | 10
2 | 2015-07-16 | 20 | 30
2 | 2015-07-23 | 10 | 30
我尝试过lag
但不知道如何限制为只有 7 天。
解决方案
我们可以在 7 天的时间内group_by
id
为sum
min
每个人提供价值。date
library(dplyr)
df %>%
group_by(id) %>%
mutate(totmin = purrr::map_dbl(date, ~sum(min[between(date, . - 7, .)])))
# id date min totmin
# <int> <date> <int> <dbl>
#1 1 2015-07-18 25 25
#2 1 2015-07-22 15 40
#3 1 2015-07-23 10 50
#4 1 2015-07-30 15 25
#5 2 2015-07-10 10 10
#6 2 2015-07-16 20 30
#7 2 2015-07-23 10 30
数据
df <- structure(list(id = c(1L, 1L, 1L, 1L, 2L, 2L, 2L), date = structure(c(16634,
16638, 16639, 16646, 16626, 16632, 16639), class = "Date"), min = c(25L,
15L, 10L, 15L, 10L, 20L, 10L)), row.names = c(NA, -7L), class = "data.frame")
推荐阅读
- javascript - Javascript Regex - 匹配字符串比表达式短?
- python - 我想在 vscode 中使用 django 在服务器上显示一个简单的“你好”消息,但它说找不到页面
- node-red - 如何在 Node-RED 中禁用模块更新检查?
- firebase - 带有 Firebase 和 FirebaseUI 的 Nuxt 中间件:错误:通过导航守卫从“/anything”转到“/login”时重定向
- r - 如何在条形图上添加一条中心线,指示 R 中条形图上的类中点?
- python - 不能强制 puppeteer 在 iframe 中点击 recaptcha
- reactjs - 使用荧光笔时看不到工具提示
- c - C语言中的最小值、最大值、平均值程序
- django - Django - order_by 多个相关字段不起作用
- javascript - 对primeng表使用日期范围过滤器