我在 R 中作業,我有一個資料框,其中包含一個字符變數 V1,其中包含許多不同的字串。我想使用 grepl 在本專欄中以 dd.mm.yy 或 dd.mm.yyyy 格式查找日期。我的資料集包括,除其他外
V1
00101230311200022
73.11.22 15:19
我的日期是 73.11.22。當然它應該是 03.11.22 或類似的,所以我想先提取它然后得到一個錯誤訊息,因為它是一個不正確的日期。
我試過了:
grepl(“[0-9]{2}.[0-9]{2}.[0-9]{2}”, x = df[,1])
但我得到了兩行的位置。謝謝你的幫助。
uj5u.com熱心網友回復:
.匹配任何字符。試試這個:
dates <- c("00101230311200022",
"73.11.22 15:19",
"03.11.2022 15:19",
"73.11.22222 15:19",
"03.11.2022")
grepl("^\\d{2}\\.\\d{2}\\.(\\d{2}|\\d{4})\\b", dates)
#> [1] FALSE TRUE TRUE FALSE TRUE
雖然有理由不使用一些經過充分測驗的日期時間決議器嗎?例如潤滑:
lubridate::parse_date_time(dates, orders = c("dmy HM", "dmy"))
#> Warning: 3 failed to parse.
#> [1] NA NA
#> [3] "2022-11-03 15:19:00 UTC" NA
#> [5] "2022-11-03 00:00:00 UTC"
使用reprex v2.0.2創建于 2022-11-06
uj5u.com熱心網友回復:
您使用正則運算式檢查日期,或者您可以嘗試決議日期:
dat <- tibble::tibble(V1 = c("00101230311200022", "73.11.22 15:19"))
#full regex (check for the entire date-time sequence)
grepl("\\d{2}\\.\\d{1,2}\\.\\d{1,2}\\s\\d{1,2}\\:\\d{1,2}", dat$V1)
#> [1] FALSE TRUE
#parse the date and check if it works
!is.na(lubridate::parse_date_time(dat$V1, orders = "ymd HM", quiet = TRUE) )
#> [1] FALSE TRUE
uj5u.com熱心網友回復:
閱讀做什么grepl()。它為您提供您正在尋找的圖案的位置。因此,對于(一個元素的)向量,您將獲得找到模式的條目的位置。因此,您收到的行索引是預期的回傳值。
您有一個字串,其中包含日期。如果該模式有效,則日期為第二個位置。您可以拆分字串以提取日期。V1請注意,如果日期的格式不如示例中的那么好,則可能需要其他方法或更明確的模式來提取日期。
# simulate your data frame with V1 variable
df <- tibble(V1 = c("00101230311200022 73.11.22 15:19","00101230311200022 33.11.22 15:19","00101230311200022 03.11.22 15:19" ) )
# split character string and extract 2nd part
df %>%
mutate(DATE = str_split(V1, pattern = " ") %>% sapply("[",2))
# A tibble: 3 × 2
V1 DATE
<chr> <chr>
1 00101230311200022 73.11.22 15:19 73.11.22
2 00101230311200022 33.11.22 15:19 33.11.22
3 00101230311200022 03.11.22 15:19 03.11.22
您現在可以處理 DATE 列,例如grepl()使用資料決議器進行過濾。在這里,lubridate 可以成為您的朋友。
df %>%
mutate(
DATE = str_split(V1, pattern = " ") %>% sapply("[",2)
, IS_DATE = lubridate::dmy(DATE)
)
# A tibble: 3 × 3
V1 DATE IS_DATE
<chr> <chr> <date>
1 00101230311200022 73.11.22 15:19 73.11.22 NA
2 00101230311200022 33.11.22 15:19 33.11.22 NA
3 00101230311200022 03.11.22 15:19 03.11.22 2022-11-03
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/529005.html
標籤:r日期验证grepl
上一篇:在附加列中替換日期
下一篇:DayJS一月的最后一天
