模拟数据:
my_list <- list(structure(list(start = c("2023-09-12T18:59:49.336+01:00", "2023-09-18 07:29:34", "z2023-09-18 07:29:34")), class = "data.frame", row.names = c(NA, -3L)), structure(list(start = c("2023-09-16T21:12:51.288Z", "2019-11-30", "2019-30-11")), class = "data.frame", row.names = c(NA, -3L)))
使用这个问题的第二个答案(请注意,第一个答案对我不起作用),我想将所有日期转换为年-月-日。
我愿意:
library(anytime)
lapply(my_list, transform,
start = anydate(start)
)
输出:
[[1]]
start
1 2023-09-12
2 2023-09-18
3 <NA>
[[2]]
start
1 2023-09-16
2 2019-11-30
3 <NA>
正如人们所看到的,它不适用于两个日期,这两个日期被强制为 NA。请注意,我的真实数据有数十个 dfs 和数千个日期,没有独特的格式。
我们如何做到这一点?所需输出:
[[1]]
start
1 2023-09-12
2 2023-09-18
3 2023-09-18
[[2]]
start
1 2023-09-16
2 2019-11-30
3 2019-11-30
采用
parse_date_time
的方法。使用 gsub
提取字符串的日期部分。
library(lubridate)
lapply(my_list, \(x) data.frame(start =
parse_date_time(
gsub(".*(\\d{4}-\\d+-\\d+).*", "\\1", unlist(x)),
orders=c("Ymd", "Ydm"))))
[[1]]
start
1 2023-09-12
2 2023-09-18
3 2023-09-18
[[2]]
start
1 2023-09-16
2 2019-11-30
3 2019-11-30
请记住,像
2023-08-09
<> 2023-09-08
这样的矛盾日期是通过第一条规则 Ymd
来解释的