r - 用行中上一个日期的下一个日期填充日期列
问题描述
我必须在数据框中填写一个日期列,在最后一个日期添加一天,然后到最后(添加一天)。它没有填补缺失的日期,因为从最后一个日期开始没有更多的日期,所以没有间隙。
还有更多列,但为了示例,让我们保持简单。
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))
推荐阅读
- json - 将字符串文字添加到 JSONPath 输出中
- flutter - 查看 mainAxisSize 效果的最低设置是多少?
- react-native - 如何在 react-native 的不同屏幕上以编程方式设置 windowSoftInputMode?
- html - 想用引导导航栏制作背景png,但它不起作用
- android - Android Studio 的 cURL 请求 (-d)
- swift - 为什么在 xcode 中构建时应用程序变黑了?试图保持用户登录
- javascript - Chrome 扩展多个异步调用
- discord.js - 是否可以让您的不和谐机器人自动踢某人而无需提及?
- php - 如何在 STMP 服务器上连接和验证
- pytorch - PyTorch 错误 isDifferentiableType(variable.scalar_type()) 用于计算复杂矩阵的 det