gpt4 book ai didi

r - 根据组内缺失的日期添加行

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

我正在尝试根据最小和最大数据向数据框中添加行 每组。假设这是我的原始数据框:

df = data.frame(Date = as.Date(c("2017-12-01", "2018-01-01", "2017-12-01", "2018-01-01", "2018-02-01","2017-12-01", "2018-02-01")),
Group = c(1,1,2,2,2,3,3),
Value = c(100, 200, 150, 125, 200, 150, 175))

请注意,第 1 组有 2 个连续日期,第 2 组有 3 个连续日期,第 3 组缺少中间的日期 (2018-01-01)。我希望能够通过添加缺失日期的行来完成数据框。但问题是我只想根据每个组中最小和最大日期之间缺少的日期添加其他日期。因此,如果我要完成此数据框,它将如下所示:
df_complete = data.frame(Date = as.Date(c("2017-12-01", "2018-01-01", "2017-12-01", "2018-01-01", "2018-02-01","2017-12-01","2018-01-01", "2018-02-01")),
Group = c(1,1,2,2,2,3,3,3),
Value = c(100, 200, 150, 125, 200, 150,NA, 175))

因为第 3 组缺少一个日期,所以只添加了一行。没有为第 1 组添加日期,因为它具有最小日期 (2017-12-01) 和最大日期 (2018-01-01) 之间的所有日期。

最佳答案

您可以使用 tidyr::completedplyr找到解决办法。 interval连续日期之间似乎是 month .方法如下:

library(dplyr)
library(tidyr)

df %>% group_by(Group) %>%
complete(Group, Date = seq.Date(min(Date), max(Date), by = "month"))

# A tibble: 8 x 3
# Groups: Group [3]
# Group Date Value
# <dbl> <date> <dbl>
# 1 1.00 2017-12-01 100
# 2 1.00 2018-01-01 200
# 3 2.00 2017-12-01 150
# 4 2.00 2018-01-01 125
# 5 2.00 2018-02-01 200
# 6 3.00 2017-12-01 150
# 7 3.00 2018-01-01 NA
# 8 3.00 2018-02-01 175

数据
df = data.frame(Date = as.Date(c("2017-12-01", "2018-01-01", "2017-12-01", "2018-01-01",
"2018-02-01","2017-12-01", "2018-02-01")),
Group = c(1,1,2,2,2,3,3),
Value = c(100, 200, 150, 125, 200, 150, 175))

关于r - 根据组内缺失的日期添加行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49330037/

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