r - 如何用数据帧中两次之间的时间填充数据帧?
问题描述
我正在尝试用“Start_dates”和“End_dates”之间的日期和时间填充我的数据框,它们都位于数据框的不同列中。我想每分钟做一次。
例如,我有一个这样的数据框:
data <- data.frame(id = c(1,1,1,2,3),
Start_dates = c("20-10-2016 00:00:00", "23-10-2016 00:00:00", "01-03-2018 00:00:00", "05-12-2018 00:00:00", "02-04-2016 00:00:00"),
End_dates = c("20-10-2016 00:02:00", "23-10-2016 00:01:00", "01-03-2018 00:01:00", "05-12-2018 00:02:00", "02-04-2016 00:01:00"))
我想得到这样的东西:
data_requested <- data.frame(id = c(1,1,1,1,1,1,1,2,2,3,3,3),
times = c("20-10-2016 00:00:00",
"20-10-2016 00:01:00", "20-10-2016 00:02:00", "23-10-2016 00:00:00",
"23-10-2016 00:01:00", "01-03-2018 00:00:00", "01-03-2018 00:01:00",
"05-12-2018 00:00:00", "05-12-2018 00:01:00", "05-12-2018 00:02:00",
"02-04-2016 00:00:00", "02-04-2016 00:01:00"))
我尝试了很多东西,但它给了我一个错误或者不是我正在寻找的结果。
解决方案
我们将 'Start_dates/End_dates' 转换为日期时间,并用于map2
获取序列
library(tidyverse)
library(lubridate)
data %>%
# convert dates to DateTime object
mutate_at(vars(ends_with('dates')), dmy_hms) %>%
# get the sequence between corresponding Start/End dates
mutate(times = map2(Start_dates, End_dates, seq, by = "1 min")) %>%
# unnest to expand the list column
unnest(times) %>%
# select the wanted columns
select(id, times)
# id times
#1 1 2016-10-20 00:00:00
#2 1 2016-10-20 00:01:00
#3 1 2016-10-20 00:02:00
#4 1 2016-10-23 00:00:00
#5 1 2016-10-23 00:01:00
#6 1 2018-03-01 00:00:00
#7 1 2018-03-01 00:01:00
#8 2 2018-12-05 00:00:00
#9 2 2018-12-05 00:01:00
#10 2 2018-12-05 00:02:00
#11 3 2016-04-02 00:00:00
#12 3 2016-04-02 00:01:00
推荐阅读
- php - Symfony 3:SQLSTATE [HY000] [2006] MySQL 服务器在更新模式期间消失了
- php - google people api:分配/创建联系人组
- javascript - 如何使用javascript根据当前日期更改正文背景?
- sql - 使用 BTEQ 插入 teradata 时时间戳无效
- .net - Visual Studio 2017 中的安装项目缺少 vs_setup.msi?
- postgresql - 从自定义声明类型数组插入 PostgreSql 表
- javascript - 初始化应用程序上的 PWA 回调
- javascript - JS 在弹出窗口上执行操作
- python - 如何在charm-crypto或python中导出/导入密钥
- aws-api-gateway - 使用来自身份服务器的访问令牌访问 AWS API 网关