gpt4 book ai didi

r - 通过 R 中的变量填充数据框日期

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

我有一个包含 10 家医院的虚拟数据集,其中记录了该医院在特定日期有多少工作。日期是每周获取的,缺少日期意味着该周有 0 个工作。

set.seed(2020)

df1 <- data.frame(
Date = as.Date(sample( as.numeric(as.Date('2011-01-01')): as.numeric(as.Date('2013-04-14')), 10, replace = T), origin = '1970-01-01'),
Hospital = sample(1:10,replace=T),
Jobs = rpois(10,2))

我想为每个医院填写缺失的日期(每周一次),因此每个医院有 120 个条目(因为 2011-01-01 和 2013-04-14 之间有 120 个星期),与对于新日期,'Jobs' 变量分配为 0。因此输出一个包含 1200 行的数据框(10 家医院,每家医院有 120 周的条目)。

注意:我已经按照这些思路尝试了一个解决方案:R fill missing dates by category但它只填充数据中已经存在的最小值和最大值之间的缺失日期,而不是上面定义的日期。我还尝试为每个医院手动将开始和结束日期添加到数据中,应用解决方案,然后再次删除它们,但这并没有按预期工作。

最佳答案

你一周的约会总是在同一个工作日吗?您的示例数据随机绘制工作日。我有一个可行的解决方案,但前提是日期的工作日始终相同。如果不是这种情况,您将不得不做更多的工作来清理您的输入数据。

生成同一工作日的测试数据:

set.seed(2020)

df1 <- data.frame(
Date = as.Date(sample(c(as.numeric(as.Date('2011-01-01')),
as.numeric(as.Date('2011-12-17')),
as.numeric(as.Date('2012-04-21')),
as.numeric(as.Date('2012-09-15')),
as.numeric(as.Date('2011-04-16')),
as.numeric(as.Date('2013-04-14'))), 10, replace = T),
origin = '1970-01-01'),
Hospital = sample(1:10,replace=T),
Jobs = rpois(10,2))

然后,为所有医院生成一个包含所有所需日期(从 2011 年 1 月 1 日开始)的数据框:

date_df <- data.frame(Date = rep(seq(as.Date("2011/01/01"), by = "week",
length.out = 120),
times = 10),
Hospital = rep(1:10, each = 120))

现在,您可以连接两个 data.frames,right_join 返回第二个 data.frame 中的所有行,因此您涵盖了所有日期。然后,将 NA 替换为 0:

library(dplyr)
df_join <- right_join(df1, date_df) %>%
mutate(Jobs = ifelse(is.na(Jobs), 0, Jobs))

关于r - 通过 R 中的变量填充数据框日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61937668/

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