- R 如何剪切日期日期并仅保留时间部分

我有如下数据:


2018-04-01 00:12:45.823 


2018-04-01 00:12:49.897 


2018-04-01 00:12:56.207



如何只保留它们:


00:12:45.823


00:12:49.897


00:12:56.207



时间:

我们也可以使用和转换回时间:


mytime<-"2018-04-01 00:12:45.823"


strsplit(mytime,"")[[1]][2]


#[1]"00:12:45.823"



好吧,用read.table读取这些数据会"很好地"破坏它:


mytime<-read.table(text="2018-04-01 00:12:45.823 


2018-04-01 00:12:49.897 


 2018-04-01 00:12:56.207",header=F)


 V1 V2


1 2018-04-01 00:12:45.823


2 2018-04-01 00:12:49.897


3 2018-04-01 00:12:56.207



使用 sub 可以匹配字符,直到一个或者多个空格( s+ ),并用空白( "" ) 替换


sub("^[^ ]+s+","", df1$col)


#[1]"00:12:45.823""00:12:49.897""00:12:56.207"



或者转换为 POSIXct,然后 format ( 这里,小数的精度可以能会有轻微的改变)


format(as.POSIXct(df1$col),"%H:%M:%OS3")


#[1]"00:12:45.822""00:12:49.897""00:12:56.207"



或者来自 tidyverseseparate


library(tidyverse)


df1 %>% 


 separate(col, into = c('col1', 'col2'), sep="") %>% 


 select(col2)



数据


str1 <- c("2018-04-01 00:12:45.823","2018-04-01 00:12:49.897", 


"2018-04-01 00:12:56.207")


df1 <- data.frame(col = str1, stringsAsFactors = FALSE)




library(rebus)


library(stringr)


datetimes <- c('2018-04-01 00:12:45.823', 


'2018-04-01 00:12:49.897', 


'2018-04-01 00:12:56.207')


dgt2 <- DGT %R% DGT


str_extract(datetimes, dgt2 %R% ':' %R% dgt2 %R% ':' %R% dgt2 %R% DOT %R% dgt2 %R% DGT)



可能更易读dgt2为 2位,使表达式更短。


[1]"00:12:45.823""00:12:49.897""00:12:56.207"



同样的结果给出了以下结果:


str_extract(datetimes, digit(2,2) %R% ':' %R% digit(2,2) %R% ':' %R% digit(2,2) %R% DOT %R% digit(3,3))



...