簡體   English   中英

R - 防止聚合 function 將日期時間時區轉換為本地時間?

[英]R - Prevent aggregate function from converting date time timezones to local time?

有沒有辦法停止將日期時間aggregate轉換為計算機的本地時區? 例如:

dtUTC <- as.POSIXct(c('2010-01-01 01:01:01', '2015-01-02 07:23:11',
                      '2016-06-02 05:23:41', '2018-01-08 17:57:43'), tz='UTC')
groups <- c(1,1,2,2)
result <- aggregate(dtUTC, by=list(groups), FUN=min)

結果將轉換為我的計算機本地時區。

> dtUTC
[1] "2010-01-01 01:01:01 UTC" "2015-01-02 07:23:11 UTC" "2016-06-02 05:23:41 UTC"
[4] "2018-01-08 17:57:43 UTC"
> result$x
[1] "2010-01-01 12:01:01 AEDT" "2016-06-02 15:23:41 AEST"

我可以事后將其轉換回來,但這是一個煩人的額外步驟。 特別是如果我有多個日期時間列。

attr(result$x, 'tzone') <- 'UTC'
> result$x
[1] "2010-01-01 01:01:01 UTC" "2016-06-02 05:23:41 UTC"

我找不到任何可以使用aggregate來更改此行為的方法,但您可以設置環境的 TZ,因此任何日期時間都將自動采用 UTC:

Sys.setenv(TZ='UTC') # <- set your TZ here

dtUTC <- as.POSIXct(c('2010-01-01 01:01:01', '2015-01-02 07:23:11',
                      '2016-06-02 05:23:41', '2018-01-08 17:57:43'))
groups <- c(1,1,2,2)

df <- data.frame(dtUTC, groups)
result <- aggregate(dtUTC ~ groups, df, min)

result$dtUTC

# [1] "2010-01-01 01:01:01 UTC" "2016-06-02 05:23:41 UTC"

您可以使用dplyr package 進行聚合

library(lubridate)
library(dplyr)
dtUTC <- as.POSIXct(c('2010-01-01 01:01:01', '2015-01-02 07:23:11',
                      '2016-06-02 05:23:41', '2018-01-08 17:57:43'), tz='UTC')
groups <- c(1,1,2,2)
b<-data.frame(date= dtUTC, group = groups) %>% group_by(group) %>% dplyr::summarise(min = min(date))
b$min


> b$min
[1] "2010-01-01 01:01:01 UTC" "2016-06-02 05:23:41 UTC"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM