r - R Studio - 如何在接下来的 7 天内在另一列中添加值计数?
问题描述
我有一个数据集,它是一个日期列表,后跟一个包含“R”表示常规或“S”表示特殊的列:
date <- c('01/01', '01/02', '01/03', '01/04', '01/05', '01/06', '01/07', '01/08', '01/09')
day <- c('S', 'S', 'R', 'S', 'R', 'S', 'R', 'R', 'S')
data <- data.frame(date, day)
It looks like this:
date . . . day
01/01. . . S
01/02. . . S
01/03. . . R
01/04. . . S
01/05. . . R
01/06. . . S
01/07. . . R
01/08. . . R
01/09. . . S
....
我现在正在尝试添加一列,以根据日期指示未来 7 天内将有多少“特殊”日子到来。例如,对于 01/01,此列应为 3,因为从 01/02 到 01/08,有 3 个“S”天(01/02、01/04 和 01/06)。
我正在尝试使用 mutate,但我不太确定如何使这项工作。谢谢!
解决方案
我们可以将“日期”列转换为Date
类,遍历“日期”,between
使用“日期”列和“日期”的每个元素创建一个逻辑索引,并在 7 天后以及“天”所在的逻辑向量'S',得到sum
library(dplyr)
library(purrr)
df1$Date <- as.Date(df1$Date, "%m/%d/%Y")
df1 %>%
mutate(nspecial = map_int(Date, ~
sum(df1$Day == 'S' & between(df1$Date, .x + days(1), .x + days(7)))))
或与base R
sapply(df1$Date, function(x) sum(df1$Day == 'S' &
df1$Date > x & df1$Date <= (x + 7)))
#[1] 3 3 3 2 2 1 1 1 0
数据
df1 <- structure(list(Date = c("01/01/2012", "01/02/2012", "01/03/2012",
"01/04/2012", "01/05/2012", "01/06/2012", "01/07/2012", "01/08/2012",
"01/09/2012"), Day = c("S", "S", "R", "S", "R", "S", "R", "R",
"S")), class = "data.frame", row.names = c(NA, -9L))
推荐阅读
- r - 如何将第 90 个百分位数按两列分组
- google-api - Google 同意屏幕上预先勾选的复选框
- flutter - 如何在颤动中创建嵌套的复选框图块?
- django - 在 django 中的文档 pdf 多页中生成一个 html 页面
- pip - 无法从 Dockerfile 构建 kubespray 容器
- r - 有没有办法专门使用 SIBER 包中的 maxLikOverlap 函数来计算 SEAc?
- racket - 如何获取特定结构的所有实例的列表
- java - Java Spring Hibernate 没有根据我的实体创建表
- google-apps-script - 当工作表名称以 X google apps script 开头时循环遍历脚本
- c# - Linq - 如何使用 Select then Where 但选择整个实体?