【发布时间】:2019-11-28 14:11:47
【问题描述】:
我正在尝试根据日期在我的数据中创建新列。
我想做的是获取以下格式的数据:
dates yes_no grp event 2017-01-02 2017-01-04
1 2017-01-01 364 1 NA NA NA
2 2017-01-02 2451 1 1 1 NA
3 2017-01-03 32440 1 NA NA NA
4 2017-01-04 234341 1 1 NA 1
5 2017-01-05 123443 1 NA NA NA
6 2017-01-01 7273 2 NA NA NA
7 2017-01-02 2331 2 1 1 NA
8 2017-01-03 12332 2 NA NA NA
9 2017-01-04 12233 2 1 NA 1
10 2017-01-05 1232323 2 NA NA NA
我有 2 个组 grp 1 和 2。该事件发生在两个组的 2017-01-02 和 2017-01-04 上。我正在尝试为这两个日期中的每一个创建一个列,并在该日期发生事件时填充该列。
我最初考虑使用case_when,然后使用以下pivot_wider:
d %>%
mutate(event = case_when(
dates == "2017-01-02" ~ 1,
dates == "2017-01-04" ~ 1
)) %>%
pivot_wider(names_from = dates, values_from = yes_no)
这不适用于我的数据,因为我遇到了内存问题,我不想为每个日期创建一个列,只为具有 event = 1 的日期创建一个列。或者,手动创建列然后直接填充日期可能很有用。
即
d$2017-01-02 = 0
ifelse(日期 = "2017-01-02", 2017-01-02 = 1, 0)
但是我有大约 30 个日期要填充并创建新列。
数据:
d <- data.frame(
dates = c("2017-01-01", "2017-01-02", "2017-01-03", "2017-01-04", "2017-01-05",
"2017-01-01", "2017-01-02", "2017-01-03", "2017-01-04", "2017-01-05"),
yes_no = c(0364, 2451, 32440, 234341, 123443,
7273, 2331, 12332, 12233, 1232323),
grp = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2)
)
【问题讨论】:
标签: r