【发布时间】:2018-12-24 19:19:58
【问题描述】:
我有一个这样的日期向量:
ds <- lubridate::as_date(c("2015-11-23", "2015-11-24", "2015-11-25",
"2015-11-26", "2015-11-27", "2015-11-30", "2015-12-01", "2015-12-02",
"2015-12-03", "2015-12-04"))
此向量包含按升序排列的日期,但在某些日期之间缺失。在此示例中,例如,11 月 28 日和 11 月 29 日缺失。
我现在想把这些日期变成假人。
一个假人应该只是月份,另一个假人应该指出每个月内的位置。在上面的例子中,2015 年 11 月的第一个观测值是 2015 年 11 月 23 日。
在这种情况下,结果将是:
df <- data.frame(November = c(1, 1, 1, 1, 1, 1, 0 ,0 ,0 ,0),
December = c(0, 0, 0, 0, 0, 0, 1 ,1 ,1 ,1),
d1 = c(1, 0,0,0,0,0,1,0,0,0),
d2 = c(0, 1,0,0,0,0,0,1,0,0),
d3 = c(0, 0,1,0,0,0,0,0,1,0),
d4 = c(0, 0,0,1,0,0,0,0,0,1),
d5 = c(0, 0,0,0,1,0,0,0,0,0),
d6 = c(0, 0,0,0,0,1,0,0,0,0))
> df
November December d1 d2 d3 d4 d5 d6
1 1 0 1 0 0 0 0 0
2 1 0 0 1 0 0 0 0
3 1 0 0 0 1 0 0 0
4 1 0 0 0 0 1 0 0
5 1 0 0 0 0 0 1 0
6 1 0 0 0 0 0 0 1
7 0 1 1 0 0 0 0 0
8 0 1 0 1 0 0 0 0
9 0 1 0 0 1 0 0 0
10 0 1 0 0 0 1 0 0
d1 表示此特定月份的首次观察日期。
请注意,它应该推广到多年。
我尝试的是这样的:
nov <- ds[months(ds) == 'November']
d1 <- ifelse(ds %in% nov & ds == dplyr::first(nov), 1, 0 )
【问题讨论】:
-
到目前为止你尝试了什么?
-
@mondano 我添加了我的尝试,但它们没有成功并且没有概括
-
你可能想看看
model.matrix;但我的问题是为什么你想这样做? -
这是一个奇怪的结构。你想达到什么目的?
-
@MauritsEvers 我不希望每个约会都有一个假人,只是我描述的方式的假人。
标签: r date lubridate dummy-variable