当字符串改变c时,从R中的字符串中间提取时间

 收藏

我有一个数据集,其中包含不同日期/时间的多个运动员的训练数据。一栏包含会话的日期和开始时间。我只希望将开始时间保留在此列中,即我要删除“ 2020/01/05”和“ UTC”。如何删除时间前后的所有内容(有400万行的日期/时间各不相同)。

 start.time
1 2020/01/05 21:30:04 UTC 
2 2020/01/05 21:30:04 UTC 
3 2020/01/05 21:30:04 UTC 
4 2020/01/05 21:30:04 UTC 
5 2020/01/05 21:30:04 UTC 
6 2020/01/05 21:30:04 UTC 

抱歉,这可能已经在某处得到了回答。

谢谢

回复
  • 多种方法可以做到这一点:

    1)使用正则表达式

    df$time <- sub('.*\\s+(.*) UTC', '\\1', df$start.time)
    df
    #               start.time     time
    #1 2020/01/05 21:30:04 UTC 21:30:04
    #2 2020/01/05 21:30:04 UTC 21:30:04
    #3 2020/01/05 21:30:04 UTC 21:30:04
    #4 2020/01/05 21:30:04 UTC 21:30:04
    #5 2020/01/05 21:30:04 UTC 21:30:04
    #6 2020/01/05 21:30:04 UTC 21:30:04
    

    2) Convert to POSIXct and then format

    这可以在基数R中完成:

    format(as.POSIXct(df$start.time, format = "%Y/%m/%d %T"), "%T")
    

    Or using lubridate

    format(lubridate::ymd_hms(df$start.time), "%T")
    

    数据

    df <- structure(list(start.time = structure(c(1L, 1L, 1L, 1L, 1L, 1L
    ), .Label = "2020/01/05 21:30:04 UTC", class = "factor")), 
    class = "data.frame", row.names = c(NA,-6L))