合并来自不同行的日期和时间

时间:2018-05-07 18:21:15

标签: r

我的开始日期列如下所示。其中一些有日期和时间,而有些只有日期或时间,而剩下的是NA。

时间和小时应该与日期在同一行,而应该是上一行的日期和时间。

      Start.Date      Values
11/6/2017\n07:00           a
3/22/2018\n06:38           b
       11/6/2017           c
           07:00           d
            <NA>           e
            <NA>           f
            <NA>           g
            <NA>           h
11/5/2017\n07:00           i
3/21/2018\n06:38           j

我想要的输出应该如下所示:

      Start.Date      Values
11/6/2017\n07:00           a
3/22/2018\n06:38           b
11/6/2017\n07:00           c
11/6/2017\n07:00           d
11/6/2017\n07:00           e
11/6/2017\n07:00           f
11/6/2017\n07:00           g
11/6/2017\n07:00           h
11/5/2017\n07:00           i
3/21/2018\n06:38           j

有没有这样做?我尝试使用tidyr来提取它,但我没有得到理想的结果。谢谢!

1 个答案:

答案 0 :(得分:0)

首先尝试使用Start.Date中的mdy_hm函数转换lubridate。然后使用tidyr::fill更新不包含有效日期/时间的行(即NA)。

library(dplyr)
library(tidyr)
library(lubridate)

df %>% mutate(Start.Date = mdy_hm(Start.Date)) %>%
  fill(Start.Date)

#             Start.Date Values
# 1  2017-11-06 07:00:00      a
# 2  2018-03-22 06:38:00      b
# 3  2018-03-22 06:38:00      c
# 4  2018-03-22 06:38:00      d
# 5  2018-03-22 06:38:00      e
# 6  2018-03-22 06:38:00      f
# 7  2018-03-22 06:38:00      g
# 8  2018-03-22 06:38:00      h
# 9  2017-11-05 07:00:00      i
# 10 2018-03-21 06:38:00      j

注意:上述答案与OP的预期不符。行也许需要正确排列。

数据:

df <- read.table(text = 
"Start.Date      Values
'11/6/2017\n07:00'     a
'3/22/2018\n06:38'    b
11/6/2017           c
07:00               d
NA           e
NA           f
NA           g
NA           h
'11/5/2017\n07:00'     i
'3/21/2018\n06:38'     j",
header = TRUE, stringsAsFactors = FALSE)