我必须填写数据框中的日期列,在最后一个日期添加一天,然后在末尾添加一天(添加一天)。它不会填充缺失的日期,因为从最后一个日期开始就没有更多的日期,因此没有间隙。
还有更多列,但为了示例起见,让我们保持简单。
df <- structure(list(dates = c("1991-01-01", "1991-01-02", "1991-01-03",
NA, NA, NA)), row.names = c(NA, 6L), class = c("tbl_df", "tbl",
"data.frame"))
# A tibble: 6 x 1
dates
* <chr>
1 1991-01-01
2 1991-01-02
3 1991-01-03
4 NA
5 NA
6 NA
我知道我可以用序列(seq.Date)替换它,但我想前段时间我在某处读过一个优雅的函数,用于使用最后一个日期和滞后填充向量。
预期结果:
# A tibble: 6 x 1
dates
* <chr>
1 1991-01-01
2 1991-01-02
3 1991-01-03
4 1991-01-04
5 1991-01-05
6 1991-01-06
类似于 zoo::na.locf()
但对于考虑到的日期,我事先不知道“从”和“到”
有什么提示吗?
最佳答案
另一种 dplyr
和 tidyr
可能性可能是:
df %>%
mutate(dates = as.Date(dates, format = "%Y-%m-%d")) %>%
fill(dates) %>%
mutate(dates = if_else(duplicated(dates),
dates + cumsum(duplicated(dates)),
dates))
dates
<date>
1 1991-01-01
2 1991-01-02
3 1991-01-03
4 1991-01-04
5 1991-01-05
6 1991-01-06
或者仅涉及dplyr
的可能性:
df %>%
mutate(dates = as.Date(dates, format = "%Y-%m-%d"),
dates = if_else(is.na(dates),
last(na.omit(dates)) + cumsum(is.na(dates)),
dates))
关于r - 使用行中上一个日期的下一个日期填充日期列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57867882/