嘗試將多個字符變數轉換為日期時間。簡化示例:
#create df/tibble with two "datetime" columns still as character
df=tibble(date1=c("2013-11-26 00:10:12.536","2013-11-26 23:04:32.512","2014-02-19 23:34:44.459"),
date2=c("2013-11-26 07:06:40.720","2013-11-27 07:09:50.552","2014-02-20 08:00:03.975"))
datetimeFormat="%Y-%m-%d %H:%M:%OS"
#OK: converting a single var using $
df_temp=df
df_temp$date1=as_datetime(df_temp$date1,format = datetimeFormat)
#not OK: converting a single var using indexing (presumably because df_temp[,"date1"] is still a tibble)
df_temp=df
df_temp[,"date1"]=as_datetime(df_temp[,"date1"],format = datetimeFormat)
#also not OK: converting multiple variables in one go
datetimeVars=c("date1","date2")
df_temp=df
df_temp[,datetimeVars]=as_datetime(df_temp[,datetimeVars],format = datetimeFormat)
如何一次將多個字符列轉換為日期時間,特別是使用包含變數名稱的變數(如上面的datetimeVars)?
一些背景關系:
- 我的源 csv 檔案不統一,并且包含一個變數 - 通常很大 - 日期時間的數量(如上例所示的自定義格式)。我可以根據它們的名稱確定哪些變數應該成為日期時間
- read_csv 不能始終將相關變數識別為日期時間
- read_csv 似乎不允許一次為多個變數設定變數型別,所以不能做類似的事情:
df=read_csv("myFile.csv",col_types=cols(datetimeVars=col_datetime(format=datetimeFormat)))我也不能為每個相關變數指定/硬編碼變數型別,cols(date1=col_datetime(),date2=col_datettime, date3=...)因為日期時間變數的數量是未知的時間
所以目前停留在匯入(read_csv)和轉換(as_datetime)兩個級別。歡迎提出建議。
uj5u.com熱心網友回復:
自匯入以來處理轉換部分高度依賴于檔案和包含的格式。
使用轉換為date類as.POSIXct(請記住,date類始終以列印的格式顯示,但在類物件中保留更多資訊 - 請參閱下面的閱讀)。
library(dplyr)
datetimeVars <- c("date1", "date2")
df_date <- df %>%
summarise(across(all_of(datetimeVars), as.POSIXct))
df_date
# A tibble: 3 × 2
date1 date2
<dttm> <dttm>
1 2013-11-26 00:10:12 2013-11-26 07:06:40
2 2013-11-26 23:04:32 2013-11-27 07:09:50
3 2014-02-19 23:34:44 2014-02-20 08:00:03
或與起始模式匹配的列名 ( starts_with())
datetimeVars <- c("date")
df_date <- df %>%
summarise(across(starts_with(datetimeVars), as.POSIXct))
df_date
# A tibble: 3 × 2
date1 date2
<dttm> <dttm>
1 2013-11-26 00:10:12 2013-11-26 07:06:40
2 2013-11-26 23:04:32 2013-11-27 07:09:50
3 2014-02-19 23:34:44 2014-02-20 08:00:03
date從課堂上閱讀您想要的格式strftime
df_date %>%
summarise(across(starts_with("date"), strftime, format="%Y-%m-%d %H:%M:%OS3"))
# A tibble: 3 × 2
date1 date2
<chr> <chr>
1 2013-11-26 00:10:12.536 2013-11-26 07:06:40.720
2 2013-11-26 23:04:32.512 2013-11-27 07:09:50.552
3 2014-02-19 23:34:44.459 2014-02-20 08:00:03.974
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/512098.html
標籤:r约会时间润滑读者
上一篇:RustPolars:如何將列值從字串更改為日期時間
下一篇:帶有月份的Pandas過濾器
