[英]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.