gpt4 book ai didi

r - 用每月序列填充 NA

转载 作者:行者123 更新时间:2023-12-04 12:12:32 25 4
gpt4 key购买 nike

我想用月度序列填充 NA。我试着用

fill(dates,seq.Dates(dates,%m+%)) 

但是没用。

我的当前日期如下:

dates <- structure(list(dates = structure(c(1L, NA, NA, NA, NA, 2L, NA, 
NA, NA, 3L), .Label = c("2019-02-01", "2019-02-05", "2019-02-09"
), class = "factor")), row.names = c(NA, -10L), class = "data.frame")

我想要的输出应该是这样的:

Desired output

最佳答案

首先,就像我上面提到的,您的日期并不是真正的日期——它们是您需要转换的因素。

我对插补包并不精通——其他人可能对这些有想法——但无论如何,对于这样一个简单的例子来说,这可能是矫枉过正的。根据日期是否已经存在来分配组,然后计算这些组并将其用作添加多少个月的偏移量。

您的实际输出可能更简洁:您不一定需要保留 group 列,并且您可能想要覆盖 date 列,而为了演示,我已将填写的日期放在单独的列中。

library(dplyr)
library(lubridate)

dates %>%
mutate(dates = as.Date(dates),
group = cumsum(!is.na(dates))) %>%
group_by(group) %>%
tidyr::fill(dates) %>%
mutate(filled = dates + months(seq_along(dates) - 1))
#> # A tibble: 10 x 3
#> # Groups: group [3]
#> dates group filled
#> <date> <int> <date>
#> 1 2019-02-01 1 2019-02-01
#> 2 2019-02-01 1 2019-03-01
#> 3 2019-02-01 1 2019-04-01
#> 4 2019-02-01 1 2019-05-01
#> 5 2019-02-01 1 2019-06-01
#> 6 2019-02-05 2 2019-02-05
#> 7 2019-02-05 2 2019-03-05
#> 8 2019-02-05 2 2019-04-05
#> 9 2019-02-05 2 2019-05-05
#> 10 2019-02-09 3 2019-02-09

编辑添加:我玩弄了第二种方法,您可以计算每个日期有多少观察值,然后为您的序列制作一个列表列,然后将其取消嵌套。我不认为它更好,而且更复杂(尤其是必须两次group_by),但也许有它的用例。

dates %>%
mutate(dates = as.Date(dates)) %>%
tidyr::fill(dates) %>%
count(dates) %>%
group_by(dates) %>%
mutate(filled = list(seq.Date(from = dates, by = "1 month", length.out = n))) %>%
tidyr::unnest(filled)
# same output as above

关于r - 用每月序列填充 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59456357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com