我想从R中的当前日期时间列创建一个startime和endtime列。我的数据已按ID分组。
以下是数据:
ID StartTime EndTime
A 12/17/2019 9:46:04 PM 12/17/2019 9:46:05 PM
A 12/18/2019 2:34:56 AM 12/18/2019 2:34:58 AM
我想要这个结果:
library(dplyr)
df %>%
group_by(id) %>%
mutate(start=date, stop=lead(start, default=end[1]))
这是我正在编写的尝试实现此目的的代码:
{{1}}
此命令未产生期望的结果。我还在对此进行研究。任何建议将不胜感激!
Tanisha Hudson
答案 0 :(得分:0)
我们可以创建一个具有c('StartTime', 'EndTime')
替代值的新列,并按ID
分组,为每个组创建唯一的行号,并以较宽的格式传播数据。
library(dplyr)
df %>%
group_by(ID, col = rep(c('StartTime', 'EndTime'), length.out = n())) %>%
mutate(id = row_number()) %>%
tidyr::pivot_wider(names_from = col, values_from = DATETIMEUTC) %>%
ungroup() %>%
select(-id)
# A tibble: 2 x 3
# ID StartTime EndTime
# <fct> <fct> <fct>
#1 A 12/17/2019 9:46:04 PM 12/17/2019 9:46:05 PM
#2 A 12/18/2019 2:34:56 AM 12/18/2019 2:34:58 AM
数据
df <- structure(list(ID = structure(c(1L, 1L, 1L, 1L), .Label = "A",
class = "factor"), DATETIMEUTC = structure(1:4, .Label = c("12/17/2019 9:46:04 PM",
"12/17/2019 9:46:05 PM", "12/18/2019 2:34:56 AM", "12/18/2019 2:34:58 AM"
), class = "factor")), class = "data.frame", row.names = c(NA, -4L))