本文介绍了用日期替换可变结构文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下数据:

df<-data.frame(dt.str = c( X2019.12.31.23.59.5; , X2020.01.31.23.59.59, X2020.02.29.23.59.59.5, X30.04.2020.23.59, X30.04.2020.23.59, X30.06.2020.23.59 ,值= c(4,3.42,2.96,7.26,3.35,2.986))

我想将dt.str转换为日期。

I would like to convert dt.str to date.

df<-df%>%突变(dt.str.2 = as.Date(str_extract(dt.str,``[^ X] + $),格式为%Y.%m。%d。%H.%M))

但是,此解决方案可以在最后3种情况下无法正常工作(可以理解)。

However, this solution does not work (understandably) on the last 3 cases.

推荐答案

您可以尝试 if_else

df = df %>% mutate (dt.str.2 = if_else(
nchar(str_extract(string =df$dt.str,pattern = '(?<=X)\\d*(?=.)'))==4,
true = as.Date(str_extract(dt.str, "[^X]+$"), format= "%Y.%m.%d.%H.%M.%S"),
false =as.Date(str_extract(dt.str, "[^X]+$"), format= "%d.%m.%Y.%H.%M")))


                dt.str value   dt.str.2
1  X2019.12.31.23.59.5 4.000 2019-12-31
2 X2020.01.31.23.59.59 3.420 2020-01-31
3 X2020.02.29.23.59.59 2.960 2020-02-29
4    X30.04.2020.23.59 7.260 2020-04-30
5    X30.04.2020.23.59 3.350 2020-04-30
6    X30.06.2020.23.59 2.986 2020-06-30


如果数据中有两个以上的日期模式,则可以继续在 false if_else()调用/ code>参数。

If you have more than two date patterns in the data, you can keep on appending if_else() calls in the false parameter.

这篇关于用日期替换可变结构文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-26 07:15