【问题标题】:R Formatting uneven datesR格式化不均匀的日期
【发布时间】:2018-02-05 23:03:04
【问题描述】:

我有一个具有以下日期格式的 .csv 数据集:

01/10/2013

但是有些事件具有这种格式:

13-14/10/2013

有谁知道我怎样才能格式化它以便在“%d/%m/%Y”中有一些东西?

【问题讨论】:

  • 对于13-14/10/2013 这样的情况,您的预期结果是什么?将其剪切为13/10/201314/10/2013 是否足够,或者您希望能够以某种方式保留这两个日期?
  • 我想要两个选项(如果可能的话),因为我仍然不确定哪个更方便。

标签: r date


【解决方案1】:

如果您想保留两个日期, 13-14/10/2013 变为 c("13/10/2013", "14/10/2013"),您可以使用 tidyrdplyr 分隔日期,然后是天数,然后将所有内容合并回来一起:

library(tidyverse)
df1 <- data.frame(dates  = c("12/10/2013", "13-14/10/2013"), 
                  values = c(4,6))

df1 %>% 
  separate(dates, into = c("d", "m", "y"), sep = "/") %>% 
  separate_rows(d, sep = "-") %>% 
  mutate(dates = paste(d, m, y, sep = "/")) %>% 
  select(dates, values)

       dates values
1 12/10/2013      4
2 13/10/2013      6
3 14/10/2013      6

【讨论】:

    【解决方案2】:

    这取决于。如果你想要 10 月 14 日,你需要

    gsub("[[:digit:]]{1,2}-", "", "13-14/10/2013")
    

    如果你想要 10 月 13 日,你需要

    gsub("-[[:digit:]]{1,2}", "", "13-14/10/2013")
    

    【讨论】:

      【解决方案3】:

      如果你的数据是这样的:

      d <- c("01/10/2013", "10/01/2015", "13-14/10/2013") 
      

      然后您可以使用正则表达式捕获不良模式,然后在整个向量上调用gsub(),将前导xx-yys 替换为第一天(xx):

      gsub("^(\\d{2})\\-(\\d{2})/(\\d{2})/(\\d{4})$", "\\1/\\3/\\4", d)
      

      或第二天(yy):

      gsub("^(\\d{2})\\-(\\d{2})/(\\d{2})/(\\d{4})$", "\\2/\\3/\\4", d)
      

      取决于哪个适合您的情况。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多