R中的日期计数
Date counting in R
我有一个 df
变量命名如下
id indexDate eventDate1 eventDate2 V1 V2 V3 ....... V365
对于 (eventDate1 - indexDate)
到 (eventDate2 - indexDate)
的日期范围,我想在 V1 to V365
列中标记出现的日期。
每个V
代表天数post-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。
如果有更好的方法,请随时告诉我!
谢谢。
这有效-
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`)
我有一个 df
变量命名如下
id indexDate eventDate1 eventDate2 V1 V2 V3 ....... V365
对于 (eventDate1 - indexDate)
到 (eventDate2 - indexDate)
的日期范围,我想在 V1 to V365
列中标记出现的日期。
每个V
代表天数post-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。
如果有更好的方法,请随时告诉我!
谢谢。
这有效-
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`)