【问题标题】:Combine date and time from different rows合并不同行的日期和时间
【发布时间】:2018-05-07 18:21:15
【问题描述】:

我的开始日期列如下所示。其中一些有日期和时间,而一些只有日期或时间,而其余的是 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 来提取它,但我没有得到想要的结果。谢谢!

【问题讨论】:

  • 为什么3rd row Start.Date 是11/6/2017\n07:00 而不是3/22/2018\n06:38
  • 有没有机会在更接近源/读取时解决这个问题?那些\n 换行符看起来不太好。
  • @MKR 日期排列不正确,我需要对其进行标准化以便使用 lubridate()。
  • @AkselA,我无法在更接近源的地方修复它,因为我使用刮板功能循环浏览了数百个此类文档。
  • @Tze 那么即使是第二行也应该有11/6/2017\n07:00的值。我说的对吗?

标签: r


【解决方案1】:

首先尝试使用来自lubridatemdy_hm 函数转换Start.Date。然后使用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)

【讨论】:

  • 它与预期的输出不匹配,但感谢您的帮助!我会尝试手动清理它。
猜你喜欢
  • 1970-01-01
  • 2015-10-12
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 2021-11-17
  • 2016-10-02
  • 2016-08-22
相关资源
最近更新 更多