日期在R中计算

时间:2017-04-11 14:03:08

标签: r date dplyr counting

我有一个df,其变量名称如下

id indexDate eventDate1 eventDate2 V1 V2 V3 ....... V365

对于(eventDate1 - indexDate)(eventDate2 - indexDate)的日期范围,我想在V1 to V365列中标记出现日期。

每个V代表indexDate之后的天数。

例如:

如果:
indexDate is 1/1/2017
eventDate1 is 1/3/2017 (= Day 2)
eventDate2 is 1/5/2017 (= Day 4),

然后:

V2-V4将被赋值为1,其余V~为0。

如果有更好的方法,请随时告诉我!

感谢。

1 个答案:

答案 0 :(得分:2)

这有效 -

library(dplyr)
library(tidyr)

# Make fake data
dates <- data.frame(id = 1:10,
                    indexDate = rep(as.Date("17/01/01"), 10), 
                    eventDate1 = as.Date(paste0("17/01/", 1:10)),
                    eventDate2 = as.Date(paste0("17/01/", 16:25)))

# Step through this to understand what's going on
dates[rep(row.names(dates), 365), ] %>% 
  arrange(id) %>% 
  mutate(Day = rep(1:365, nrow(dates)),
         Flag = ifelse(Day <= as.numeric(eventDate2 - indexDate) & 
                         Day > as.numeric(eventDate1 - indexDate), 1, 0)) %>%
  # move to long format
  spread(Day, Flag)

我玩了paste0("V", Day),但传播无序。使用此列约定,您可以使用反向标记`。

来引用各个列
dates %>% select(`1`, `2`, `3`)