gsub di R untuk membakukan format tanggal campuran dalam bingkai data [duplikat]
Aug 20 2020
saya memiliki dataframe dengan tanggal dalam format yang berbeda. ingin menghapus pertama hanya 19
pada tahun yang memilikinya dan menggunakan as.POSIXlt
untuk mengubah tanggal. tapi gsub tidak menjawab
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"
akan berterima kasih atas bantuan Anda
Terima kasih
Jawaban
2 RonakShah Aug 20 2020 at 11:24
Saya menambahkan entri ekstra df.DOB
untuk memiliki 19 sebagai tanggal.
Anda dapat menggunakan sub
untuk menghapus "19" yang diikuti oleh dua karakter.
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
Pola lain :
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
Anda dapat menggunakan 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
Solusi lain adalah Anda dapat memisahkan bulan dan tahun dan menerapkan penggantian hanya pada tahun (terima kasih semua atas komentar Anda pada jawaban saya):
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 = "/"))
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'