แยกเวลาจากตรงกลางของสตริงใน R เมื่อสตริงเปลี่ยนค

ฉันมีชุดข้อมูลที่มีข้อมูลการฝึกสำหรับนักกีฬาหลายคนในวัน/เวลาที่แตกต่างกัน คอลัมน์หนึ่งประกอบด้วยวันที่และเวลาเริ่มต้นของเซสชัน ฉันเพียงต้องการเก็บเวลาเริ่มต้นไว้ในคอลัมน์นี้เท่านั้น เช่น ฉันต้องการลบ "2020/01/05" และ "UTC" วิธีลบทุกอย่างก่อนและหลังเวลา (มี 4 ล้านแถวที่มีวันที่/เวลาต่างกัน)

 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 

ขออภัยนี่อาจมีคำตอบอยู่แล้วที่ไหนสักแห่ง

ขอบคุณ


person wattss    schedule 27.03.2020    source แหล่งที่มา


คำตอบ (2)


หลายวิธีในการทำเช่นนี้:

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

ที่นี่ เราจับภาพทุกสิ่งระหว่างช่องว่างและ "UTC" \\1 ถูกใช้เป็นข้อมูลอ้างอิงย้อนหลังเพื่อบันทึกค่าที่แยกออกมา


2) แปลงเป็น POSIXct จากนั้น format

ซึ่งสามารถทำได้ในฐาน R :

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

หรือใช้ 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))
person Ronak Shah    schedule 27.03.2020
comment
ขอบคุณมาก. ฉันใช้ sub และมันทำงานได้อย่างสมบูรณ์แบบ แต่คุณช่วยอธิบายได้ไหมว่ามันทำงานอย่างไร? เช่น ข้อโต้แย้งที่คุณป้อนหมายถึงอะไร (ขออภัยที่ฉันยังใหม่กับ R) - person wattss; 27.03.2020
comment
@wattss ฉันอัปเดตคำตอบเพื่อรวมคำอธิบายบางส่วน - person Ronak Shah; 27.03.2020

เราสามารถใช้ anytime จาก anytime

library(anytime)
format(anytime(df$start.time), "%T")

หรือกับ as.ITime

library(data.table)
as.ITime(df$start.time)
#[1] "21:30:04" "21:30:04" "21:30:04" "21:30:04" "21:30:04" "21:30:04"

ข้อมูล

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))
person akrun    schedule 27.03.2020