데이터 프레임에서 혼합 날짜 형식을 표준화하기위한 R의 gsub [중복]

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.DOB19를 날짜로 추가 항목을 추가했습니다 .

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 = "/"))