df1:所有日期從 2021-04-20 到 2022-05-15
| 日期 |
|---|
| 2021-04-20 |
| 2021-04-21 |
| 2021-04-22 |
| 2021-04-23 |
| 2021-04-24 |
| 2021-04-25 |
| 2021-04-26 |
| ... |
| 2022-04-12 |
| 2022-04-13 |
| 2022-04-14 |
| 2022-05-15 |
df2: 2021-04-20 到 2022-05-15 之間的隨機且不完整的日期串列
| 日期 | 團體 |
|---|---|
| 2021-04-20 | 1001 |
| 2021-04-21 | 1001 |
| 2021-04-25 | 1001 |
| 2021-04-27 | 1001 |
| 2021-04-30 | 1001 |
| 2021-05-05 | 1001 |
| 2021-06-06 | 1001 |
| 2021-04-20 | 1002 |
| 2021-04-21 | 1002 |
| 2021-04-22 | 1002 |
| 2021-04-23 | 1002 |
| 2021-05-24 | 1002 |
| 2021-05-22 | 1002 |
| 2021-06-23 | 1002 |
| 2021-06-24 | 1002 |
| 2021-07-01 | 1002 |
| 2021-07-12 | 1002 |
| 2021-08-09 | 1002 |
dfdesired : 想用 df1 中的日期填寫 df2 中不完整的日期。我想按組執行此操作。這意味著 1001 應該從 2021-04-20 開始,到 2022-05-15 結束。1002 也應該從 2021-04-20 開始,到 2022-05-15 結束。
| 日期 | 團體 |
|---|---|
| 2021-04-20 | 1001 |
| 2021-04-21 | 1001 |
| 2021-04-22 | 1001 |
| 2021-04-23 | 1001 |
| 2021-04-24 | 1001 |
| 2021-04-25 | 1001 |
| 2021-04-26 | 1001 |
| ... | ... |
| 2022-04-12 | 1001 |
| 2022-04-13 | 1001 |
| 2022-04-14 | 1001 |
| 2022-05-15 | 1001 |
| 2021-04-20 | 1002 |
| 2021-04-21 | 1002 |
| 2021-04-22 | 1002 |
| 2021-04-23 | 1002 |
| 2021-04-24 | 1002 |
| 2021-04-25 | 1002 |
| 2021-04-26 | 1002 |
| ... | ... |
| 2022-04-12 | 1002 |
| 2022-04-13 | 1002 |
| 2022-04-14 | 1002 |
| 2022-05-15 | 1002 |
不知道該怎么做。任何幫助,將不勝感激。
uj5u.com熱心網友回復:
您可以使用base::merge(..., by=NULL). 在這里,我從Group完整日期序列的新框架上的唯一值框架開始。
dates <- data.frame(Date = seq(as.Date("2021-04-20"), as.Date("2022-05-15"), by="day"))
out <- merge(unique(dat[,c("Group"), drop = FALSE]), dates, by = NULL)
head(out)
# Group Date
# 1 1001 2021-04-20
# 2 1002 2021-04-20
# 3 1001 2021-04-21
# 4 1002 2021-04-21
# 5 1001 2021-04-22
# 6 1002 2021-04-22
tail(out)
# Group Date
# 777 1001 2022-05-13
# 778 1002 2022-05-13
# 779 1001 2022-05-14
# 780 1002 2022-05-14
# 781 1001 2022-05-15
# 782 1002 2022-05-15
資料:
dat <- structure(list(Date = c("2021-04-20", "2021-04-21", "2021-04-25", "2021-04-27", "2021-04-30", "2021-05-05", "2021-06-06", "2021-04-20", "2021-04-21", "2021-04-22", "2021-04-23", "2021-05-24", "2021-05-22", "2021-06-23", "2021-06-24", "2021-07-01", "2021-07-12", "2021-08-09"), Group = c(1001L, 1001L, 1001L, 1001L, 1001L, 1001L, 1001L, 1002L, 1002L, 1002L, 1002L, 1002L, 1002L, 1002L, 1002L, 1002L, 1002L, 1002L)), class = "data.frame", row.names = c(NA, -18L))
uj5u.com熱心網友回復:
這是一個 dplyr solution:
我們
anti_join用來獲取date不在df2.然后我們使用
bind_rows將這些值系結到df2在獲得日期格式后,
ymd我們安排year并填寫Group列。一些調整。
library(dplyr)
library(lubridate)
anti_join(df1, df2) %>%
bind_rows(df2) %>%
mutate(Date = ymd(Date)) %>%
arrange(year(Date)) %>%
fill(Group, .direction = "updown") %>%
select(1,2) %>%
arrange(Group, Date)
Date Group
1 2021-04-20 1001
2 2021-04-21 1001
3 2021-04-24 1001
4 2021-04-25 1001
5 2021-04-26 1001
6 2021-04-27 1001
7 2021-04-30 1001
8 2021-05-05 1001
9 2021-06-06 1001
10 2021-04-20 1002
11 2021-04-21 1002
12 2021-04-22 1002
13 2021-04-23 1002
14 2021-05-22 1002
15 2021-05-24 1002
16 2021-06-23 1002
17 2021-06-24 1002
18 2021-07-01 1002
19 2021-07-12 1002
20 2021-08-09 1002
21 2022-04-12 1002
22 2022-04-13 1002
23 2022-04-14 1002
24 2022-05-15 1002
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/494357.html
上一篇:將bigint顯式轉換為日期
