r - 使用行中上一个日期的下一个日期填充日期列

标签 r date dataframe dplyr zoo

我必须填写数据框中的日期列,在最后一个日期添加一天,然后在末尾添加一天(添加一天)。它不会填充缺失的日期,因为从最后一个日期开始就没有更多的日期,因此没有间隙。

还有更多列,但为了示例起见,让我们保持简单。

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() 但对于考虑到的日期,我事先不知道“从”和“到”

有什么提示吗?

最佳答案

另一种 dplyrtidyr 可能性可能是:

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/

相关文章:

将 "flipped"表正确读入 data.frame

python - 在Dataframe python中的列中过滤所有带有NaT的行

R:提供 5 秒钟要求暂停。如果不需要暂停,则继续该过程

减少计算系数的处理时间

javascript - 我的日期正则表达式有什么问题?

ios - 我应该如何将歌曲持续时间表示/存储为属性?我想使用常见的歌曲持续时间格式,例如 "HH:MM:SS"

ios - NSDate 在一个月的第一天返回错误的日期

python - Pandas 根据分组列值合并 DF 列表

r - R2和RMSE在pls R的交叉验证中如何计算

r - R中DataTable中的条件格式单元格