gpt4 book ai didi

R:如果日期差异小于 7,则按组添加前一行的值

转载 作者:行者123 更新时间:2023-12-04 11:05:16 25 4
gpt4 key购买 nike

我有一个问题以某种方式结合了这两个问题(Substract date from previous row by group (using R)subtract value from previous row by group)。但无法设法让脚本工作。

我有一个看起来像这样的数据集:

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 来添加过去 7 天内按 id 播放的总分钟数:

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 天。

最佳答案

我们可以group_by idsum min 每个date 的值7 天期限。

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")

关于R:如果日期差异小于 7,则按组添加前一行的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58730875/

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