如何将不完整的字符串日期修复为特定格式

问题描述 投票:0回答:1

我有这个数据框(有 100 万条记录):

s_ip    <-c("ip001","ip002","ip003","ip004","ip005","ip006","ip007","ip008","ip009")
s_fide  <-c("04/10/2024 11:28","12/06/2023 22:14","02/14/2024 17:53:01","04/02/2024 21:41","02/22/2024 14:39:34","02/21/2024 21:32:39","02/29/2024 21:16:17","04/03/2024 21:19","03/21/2024 22:13:17")
df_v <- data.frame(s_ip,s_fide)
​
> df_v
   s_ip              s_fide
1 ip001    04/10/2024 11:28
2 ip002    12/06/2023 22:14
3 ip003 02/14/2024 17:53:01
4 ip004    04/02/2024 21:41
5 ip005 02/22/2024 14:39:34
6 ip006 02/21/2024 21:32:39
7 ip007 02/29/2024 21:16:17
8 ip008    04/03/2024 21:19
9 ip009 03/21/2024 22:13:17

还想要另一个:

> df_v
   s_ip              s_fide              s_fout
1 ip001    04/10/2024 11:28 2024-04-10 11:28:00
2 ip002    12/06/2023 22:14 2023-12-06 22:14:00
3 ip003 02/14/2024 17:53:01 2024-02-14 17:53:01
4 ip004    04/02/2024 21:41 2024-04-02 21:41:00
5 ip005 02/22/2024 14:39:34 2024-02-22 14:39:34
6 ip006 02/21/2024 21:32:39 2024-02-21 21:32:39
7 ip007 02/29/2024 21:16:17 2024-02-29 21:16:17
8 ip008    04/03/2024 21:19 2024-04-03 21:19:00
9 ip009 03/21/2024 22:13:17 2024-03-21 22:13:17

我想使用函数 f_mybaby() 基于 s_fide 列构建 s_fout 列(两列都是字符串或字符类型) 可以使用管道 %$% 来构建它:

df_v$s_fout <- df_v %$% f_mybaby(s_fide)

如何构建 f_mybaby() 函数? 提前致谢。 我是“r”的初学者

r
1个回答
0
投票

您可以将其包装在一个函数中。使用

grepl
我们可以识别缺失的零秒并
paste0
它们。

> cstr <- \(x) {
+   zs <- !grepl(r"{\d+:\d+:\d+$}", x)
+   x[zs] <- paste0(x[zs], ':00')
+   x
+ }
> 
> strptime(cstr(df_v$s_fide), '%m/%d/%Y %T')
[1] "2024-04-10 11:28:00 CEST" "2023-12-06 22:14:00 CET" 
[3] "2024-02-14 17:53:01 CET"  "2024-04-02 21:41:00 CEST"
[5] "2024-02-22 14:39:34 CET"  "2024-02-21 21:32:39 CET" 
[7] "2024-02-29 21:16:17 CET"  "2024-04-03 21:19:00 CEST"
[9] "2024-03-21 22:13:17 CET" 

数据:

> dput(df_v)
structure(list(s_ip = c("ip001", "ip002", "ip003", "ip004", "ip005", 
"ip006", "ip007", "ip008", "ip009"), s_fide = c("04/10/2024 11:28", 
"12/06/2023 22:14", "02/14/2024 17:53:01", "04/02/2024 21:41", 
"02/22/2024 14:39:34", "02/21/2024 21:32:39", "02/29/2024 21:16:17", 
"04/03/2024 21:19", "03/21/2024 22:13:17")), class = "data.frame", row.names = c(NA, 
-9L))
© www.soinside.com 2019 - 2024. All rights reserved.