R与Lubridate:导入CSV文件时如何设置时区
解决read_csv中设置datetime时区的问题及提取时区方法
报错原因
col_datetime()函数本身不支持locale或tz参数,这些参数需要传递给read_csv()的全局设置,或者在导入后单独处理datetime列。
正确设置时区的两种方法
方法1:在read_csv中全局指定locale
将时区设置放在read_csv()的locale参数中,所有datetime列都会应用这个时区:
example3 <- read_csv("NAME, TRNSCO, ID, DPMNEM, DATE, PEAK BEC,EGSI,1062,SERP,10/12/2022 18:00,6.464 BEC,EGSI,1072,SPTR,10/30/2022 22:00,67.456 BEC,EGSI,1152,DYNE,10/24/2022 12:00,4.606 CLA,ELI,3023,FRMR,10/12/2022 17:00,6.352 CLA,ELI,3043,SHON,10/19/2022 8:00,2.296 CLA,ELI,3063,BERN,10/20/2022 7:00,5.232", col_types = cols_only( NAME = col_character(), ID = col_character(), DPMNEM = col_character(), DATE = col_datetime(format = "%m/%d/%Y %H:%M"), PEAK = col_double()), locale = locale(tz = "US/Central"))
方法2:导入后单独设置时区
先按默认方式导入数据,再用lubridate包的force_tz()函数为datetime列指定时区:
library(lubridate) # 先导入数据 example3 <- read_csv("NAME, TRNSCO, ID, DPMNEM, DATE, PEAK BEC,EGSI,1062,SERP,10/12/2022 18:00,6.464 BEC,EGSI,1072,SPTR,10/30/2022 22:00,67.456 BEC,EGSI,1152,DYNE,10/24/2022 12:00,4.606 CLA,ELI,3023,FRMR,10/12/2022 17:00,6.352 CLA,ELI,3043,SHON,10/19/2022 8:00,2.296 CLA,ELI,3063,BERN,10/20/2022 7:00,5.232", col_types = cols_only( NAME = col_character(), ID = col_character(), DPMNEM = col_character(), DATE = col_datetime(format = "%m/%d/%Y %H:%M"), PEAK = col_double())) # 设置时区 example3$DATE <- force_tz(example3$DATE, tzone = "US/Central")
提取datetime列的时区信息
可以用lubridate包的tz()函数直接提取:
tz(example3$DATE)
或者通过attr()函数获取属性值:
attr(example3$DATE, "tzone")
内容的提问来源于stack exchange,提问作者DavidH
相关产品推荐
相关产品推荐

