【发布时间】:2020-08-30 06:11:58
【问题描述】:
我有一个包含三列的小标题:
- runner - 代表跑步者姓名的字符串
- race - 表示比赛次数的数值
- date - 比赛日期
我想添加第四列 last45d,它表示与当前行日期相比,过去 45 天内进行的比赛的数量。我的代表包括样本数据和我尝试生成新行(我得到所有 NA)。
代表:
library(tidyverse)
library(lubridate)
library(reprex)
df<-tibble(runner=c("D.Wottle","D.Wottle","D.Wottle","D.Wottle","D.Wottle","D.Wottle","C.Hottle","C.Hottle","C.Hottle","C.Hottle","C.Hottle","C.Hottle","JJ.Watt","JJ.Watt","JJ.Watt","JJ.Watt","JJ.Watt","JJ.Watt"),
race=c(6,5,4,3,2,1,6,5,4,3,2,1,6,5,4,3,2,1),
date=c(ymd('20170625'),ymd('20170524'),ymd('20170420'),ymd('20170329'),ymd('20170308'),ymd('20170215'),ymd('20170625'),ymd('20170524'),ymd('20170410'),ymd('20170329'),ymd('20170304'),ymd('20170215'),ymd('20170615'),ymd('20170524'),ymd('20170428'),ymd('20170329'),ymd('20170301'),ymd('20170225')),
surface=c('T','T','D','T','D','T','T','T','D','T','D','T','T','T','D','T','D','T'),
distance=c(1400,1400,1600,1400,1500,1400,1400,1400,1600,1400,1500,1400,1400,1400,1600,1400,1500,1400),
finish=c(1,2,2,1,2,3,2,3,3,2,1,1,3,1,1,3,3,2)
)
df <- df %>%
group_by(runner) %>%
mutate(last45 = map_int(date, ~ sum(between(as.numeric(difftime(.x, date, units = "days")), 1e-9, 90)))) %>%
ungroup()
df
#> # A tibble: 18 x 7
#> runner race date surface distance finish last45
#> <chr> <dbl> <date> <chr> <dbl> <dbl> <int>
#> 1 D.Wottle 6 2017-06-25 T 1400 1 3
#> 2 D.Wottle 5 2017-05-24 T 1400 2 3
#> 3 D.Wottle 4 2017-04-20 D 1600 2 3
#> 4 D.Wottle 3 2017-03-29 T 1400 1 2
#> 5 D.Wottle 2 2017-03-08 D 1500 2 1
#> 6 D.Wottle 1 2017-02-15 T 1400 3 0
#> 7 C.Hottle 6 2017-06-25 T 1400 2 3
#> 8 C.Hottle 5 2017-05-24 T 1400 3 3
#> 9 C.Hottle 4 2017-04-10 D 1600 3 3
#> 10 C.Hottle 3 2017-03-29 T 1400 2 2
#> 11 C.Hottle 2 2017-03-04 D 1500 1 1
#> 12 C.Hottle 1 2017-02-15 T 1400 1 0
#> 13 JJ.Watt 6 2017-06-15 T 1400 3 3
#> 14 JJ.Watt 5 2017-05-24 T 1400 1 4
#> 15 JJ.Watt 4 2017-04-28 D 1600 1 3
#> 16 JJ.Watt 3 2017-03-29 T 1400 3 2
#> 17 JJ.Watt 2 2017-03-01 D 1500 3 1
#> 18 JJ.Watt 1 2017-02-25 T 1400 2 0
由reprex package (v0.3.0) 于 2020 年 5 月 13 日创建
这就是我希望最终结果的样子:
【问题讨论】: