【问题标题】:How to fix dates in a data frame that have mixed characters如何修复具有混合字符的数据框中的日期
【发布时间】:2019-08-28 16:36:49
【问题描述】:

我通过 openxlsx 将数据集导入到数据框中。电子表格有各种字段,包括几个日期字段。在这些日期字段中有一些字符——特别是“A”和“*”。所以我的数据集是这样的:

一个 | 43998

B | 44316

C | 44284

D | 2019 年 3 月 11 日

E | 44323

F | 20 年 7 月 29 日*

我正在使用多个日期字段,并且正在寻找一种快速修复它们的方法(而不是过滤、str_replacing、然后更改数据类型和重新绑定)。

我一直在寻找 lubridate,但当日期出现如此不同时,我找不到方法。

library(openxlsx)
library(lubridate)

data <- read.xlsx(file)
data2 <- data %>% mutate(fixed_date1 = ifelse(str_detect(date1,
   " A")==TRUE,as.Date(date1, guess_formats(date1,
   "dmy")),as.Date(as.numeric(date1)-2,origin = "1900-01-01")))

这仍然不能解释浮在其中的星号,我想我必须在 ifelse 语句中构建一个 str_detect(date1, "\\*") 行...

我只是希望找到一种方法将其应用到每一列中一次滑动。

提前致谢。

【问题讨论】:

  • 尝试使用来自lubridateparse_date_time 或来自anytimeanydate

标签: r date lubridate


【解决方案1】:

我已经用几行解决了它:

df$date1 <- str_replace_all(df$date1, " A", "")
df$date1 <- str_replace_all(df$date1, "\\*", "")
df <- df %>% mutate(fixed_date1 = ifelse(str_detect(date1, "-") == TRUE, as.Date(date1,
      "%d-%b-%y"), as.Date(as.numeric(date1)-2, origin = "1900-01-01")))

所以我查找并替换了所有特殊字符,然后根据是否有“-”进行日期转换。

可能有更简单的方法,但这对我有用。

【讨论】:

  • 我还应该说,我也必须将变量更改为日期,但它似乎有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
  • 2015-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多