gsub ใน R เพื่อสร้างมาตรฐานรูปแบบวันที่ผสมใน data frame [ซ้ำกัน]
Aug 20 2020
ฉันมีดาต้าเฟรมพร้อมวันที่ในรูปแบบต่างๆ ต้องการลบเฉพาะ19
ในปีที่มีและใช้as.POSIXlt
เพื่อแปลงวันที่เท่านั้น แต่ gsub ไม่รับ
df.DOB <- c("12/11/99", "10/24/67", "8/18/13", "2/29/45", "2/28/63", "12/14/77",
"07/25/1923", "01/07/1989", "09/02/1974")
gsub("\\/19.*", "", df.DOB)
# [1] "12/11/99" "10/24/67" "8/18/13" "2/29/45" "2/28/63" "12/14/77" "07/25" "01/07" "09/02"
df.DOB.formatted <- as.POSIXlt(df.DOB, format = "%m/%d/%y")
df.DOB.formatted <- df.DOB.formatted - 100L
df.DOB.formatted
# [1] "1999-12-10 23:58:20 EST" "2067-10-23 23:58:20 EDT" "2013-08-17 23:58:20 EDT"
# [4] NA "2063-02-27 23:58:20 EST" "1977-12-13 23:58:20 EST"
# [7] "2019-07-24 23:58:20 EDT" "2019-01-06 23:58:20 EST" "2019-09-01 23:58:20 EDT"
จะขอบคุณสำหรับความช่วยเหลือของคุณ
ขอบคุณ
คำตอบ
2 RonakShah Aug 20 2020 at 11:24
ฉันเพิ่มรายการพิเศษdf.DOB
เพื่อให้มี 19 เป็นวันที่
คุณสามารถใช้sub
เพื่อลบ "19" ซึ่งตามด้วยอักขระสองตัว
df.DOB <- c("12/11/99","10/24/67","07/25/1923", "01/07/1989",
"09/02/1974","01/19/1987")
sub('19(?=..$)', '', df.DOB, perl = TRUE)
#[1] "12/11/99" "10/24/67" "07/25/23" "01/07/89" "09/02/74" "01/19/87"
1 DarrenTsai Aug 20 2020 at 11:34
regex
รูปแบบอื่น:
df.DOB <- c("12/11/99", "10/24/67", "07/25/1923", "01/07/1989", "09/02/1974", "01/19/1987")
sub("19(..)$", "\\1", df.DOB)
# [1] "12/11/99" "10/24/67" "07/25/23" "01/07/89" "09/02/74" "01/19/87"
1 SamS Aug 20 2020 at 11:13
คุณสามารถใช้ str_replace
library(stringr)
df.DOB <- c("12/11/99","10/24/67","8/18/13","2/29/45","2/28/63","12/14/77",
"07/25/1923","01/07/1989","09/02/1974")
str_replace(df.DOB, "19", "")
# if you have 19 in other parts
str_replace(df.DOB, "19(?=..$)", "") # From Ronak and Darren comments
อีกวิธีหนึ่งคือคุณสามารถแยกเดือนและปีและเปลี่ยนเฉพาะปี (ขอบคุณทุกคนสำหรับความคิดเห็นของคุณเกี่ยวกับคำตอบของฉัน):
df.DOB <- c("12/19/1999","10/24/67","8/19/13","2/29/45","2/28/63","12/14/77",
"07/25/1923","01/07/1989","09/02/1974")
df1 = str_split(df.DOB, "/", simplify = TRUE)
df1[,3] = str_replace(df1[,3], "19", "")
apply(df1,1,function(d) paste(d,collapse = "/"))