我有一個包含數千個變數的雜亂資料框,并且希望將特定列自動轉換為日期,而無需明確指定哪些列。要轉換的所有列的名稱中都包含“日期”。大多數是,mdy但他們也可以dmy。有些包含錯誤或格式錯誤的日期,但比例非常小 <0.1%。
我試過:
df %>% select(contains("Date")) %>% as_Date() #Does not work
df %>% select(contains("Date")) %>% mdy() #selecting only the columns with dates, does not work
df %>% select(contains("Date")) %>% parse_date_time( c("mdy", "dmy")) #also does not work
我想我沒有得到一些基本的東西。
uj5u.com熱心網友回復:
這是一個基于的解決方案lubridate:
玩具資料:
df <- data.frame(Date1 = c("01-Mar-2015", "31-01-2012", "15/01/1999"),
Var_Date = c("01-02-2018", "01/08/2016", "17-09-2007"),
More_Dates = c("27/11/2009", "22-Jan-2013", "20-Nov-1987"))
# define formats:
formats <- c("%d-%m-%Y", "%d/%m/%Y", "%d-%b-%Y")
一個dyplr解決方案:
library(dplyr)
library(lubridate)
df %>%
mutate(across(contains("Date"),
~ parse_date_time(., orders = formats))) %>%
mutate(across(contains("Date"),
~ format(., "%d-%m-%Y")))
Date1 Var_Date More_Dates
1 01-03-2015 01-02-2018 27-11-2009
2 31-01-2012 01-08-2016 22-01-2013
3 15-01-1999 17-09-2007 20-11-1987
一個base R解決方案:
library(lubridate)
df[,grepl("Date", names(df))] <- apply(df[,grepl("Date", names(df))], 2,
function(x) format(parse_date_time(x, orders = my_formats), "%d-%m-%Y"))
uj5u.com熱心網友回復:
我們可以使用parse_date從parsedate
library(parsedate)
library(dplyr)
df %>%
mutate(across(everything(), parse_date))
Date1 Var_Date More_Dates
1 2015-03-01 2018-01-02 2009-11-27
2 2012-01-31 2016-01-08 2013-01-22
3 1999-01-15 2007-09-17 1987-11-20
資料
df <- structure(list(Date1 = c("01-Mar-2015", "31-01-2012", "15/01/1999"
), Var_Date = c("01-02-2018", "01/08/2016", "17-09-2007"), More_Dates = c("27/11/2009",
"22-Jan-2013", "20-Nov-1987")),
class = "data.frame", row.names = c(NA,
-3L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/333091.html
上一篇:每次用新值替換字串中的相同模式
下一篇:標準化測驗資料集時提高精度
