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"列转换为Date类,在"Date"上循环,用between创建一个逻辑索引,其中"Date"栏和"Date"的每个元素以及7天后的逻辑向量,其中"Day"是"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))

最新更新