r - R:没有任何情况的日期怎么填?
问题描述
我有一个数据框,例如
db1 <- data.frame(date=as.Date(c('2020/01/01','2020/01/03','2020/01/07')),case=c(1,3,4))
我想填写日期,例如,
db2 <- data.frame(date=as.Date(c('2020/01/01','2020/01/02','2020/01/03','2020/01/04','2020/01/05','2020/01/06','2020/01/07')),case=c(1,0,3,0,0,0,4))
请告诉我该怎么做。
解决方案
我们可以使用tidyr::complete
来完成缺失的日期。
tidyr::complete(db1, date = seq(min(date), max(date), by = "1 day"),
fill = list(case = 0))
# date case
# <date> <dbl>
#1 2020-01-01 1
#2 2020-01-02 0
#3 2020-01-03 3
#4 2020-01-04 0
#5 2020-01-05 0
#6 2020-01-06 0
#7 2020-01-07 4
另一种方法dplyr
可能是:
library(dplyr)
db1 %>%
slice(-n()) %>%
tidyr::uncount(case + 1) %>%
group_by(date) %>%
mutate(newdate = date + row_number() - 1,
case = replace(case, row_number() != 1, 0)) %>%
bind_rows(db1 %>% slice(n()) %>% rename(newdate = date)) %>%
ungroup() %>%
select(-date)
推荐阅读
- ssl - Fabric orderer TLS:在证书输入中找不到任何 PEM 数据
- java - 在 Kotlin 中实现 (/inherit/~extend) 注解
- c# - 如何在firstordefault之后检查空值?
- sql - SQL where 子句顺序可以改变 postgresql10 中的性能
- node.js - 运行基于 LoopBack 框架(Node.js)的示例时出现无法在 Function.Module._resolveFilename 找到模块之类的错误
- eclipse - 如何修复错误:项目中的测试源文件夹“src/test/java”必须有一个不用于主源的输出文件夹”?
- hibernate - Hibernate - 将实体引用列表复制到新实体抛出 RollbackException
- c# - BinaryTreeSearch PostOrder 遍历和搜索
- r - R - 每组带有回归线的ggplot不起作用
- php - 如何在多对多领域的laravel数据透视表中停止自动排序