首页 > 解决方案 > 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,但我不太确定如何使这项工作。谢谢!

标签: rdplyr

解决方案


我们可以将“日期”列转换为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))

推荐阅读