相关疑难解决方法(0)

在R中使用dplyr :: if_else()基于另一个变量的值更改POSIXct时间戳的时区

我正在使用POSIXct格式的一些时间戳。目前,它们都显示在“ UTC”时区中,但实际上有些已知处于“ America / New_York”时区中。我想更正时间戳,以便它们都读为正确的时间。

我最初使用和ifelse()一起声明lubridate::with_tz()。这没有按预期方式工作,因为ifelse()未在POSIXct中返回值。

然后,我dplyr::if_else()根据此处的其他帖子进行了尝试,但效果也不理想。

我可以使用更改单个时间戳,甚至可以将时间戳列表更改为不同的时区with_tz()(因此我知道它可以工作),但是当我在if_else()输出中使用它时,所有的值都将在给定“ yes”参数的情况下返回in if_else()

library(lubridate)
library(dplyr)

x <- data.frame("ts" = as.POSIXct(c("2017-04-27 13:44:00 UTC", 
"2017-03-10 12:22:00 UTC", "2017-03-22 10:24:00 UTC"), tz = "UTC"), 
"tz" = c("UTC","EST","UTC"))

x <- mutate(x, ts_New = if_else(tz == "UTC", with_tz(ts, "America/New_York"), ts))
Run Code Online (Sandbox Code Playgroud)

预期结果低于ts_New的时间戳调整为新时区的情况,但仅当tz =“ UTC”中的值时才如此。tz =“ America / New_York”的时间戳不应更改。

                   ts      tz                  ts_NEW
1 2017-04-27 13:44:00     UTC     2017-04-27 09:44:00
2 2017-03-10 12:22:00     EST     2017-03-10 12:22:00
3 2017-01-22 …
Run Code Online (Sandbox Code Playgroud)

timestamp r posixct lubridate dplyr

6
推荐指数
1
解决办法
88
查看次数

从纬度和经度 R 转换为本地时区

我有一个包含很多位置(大约 30.000 个)的数据框,我需要将每个位置的时间转换为当地时间。\n我尝试了一些想法,例如这个这个。但他们不适合我。

\n\n

我有这样的数据:

\n\n
dt = data.table(date = c("2018-01-16 22:02:37",\n                         "2018-01-16 22:54:00", \n                         "2018-01-16 23:08:38"),\n                lat = c(-54.5010,\n                        -54.5246,\n                        -54.5285),\n                long = c(-25.0433, \n                         -25.0929,\n                         -25.0832))\n
Run Code Online (Sandbox Code Playgroud)\n\n

我期望这个输出:

\n\n
date                      lat           long\n2018-01-16 20:02:37       -54.5010      -25.0433\n2018-01-16 20:54:00       -54.5246      -25.0929\n2018-01-16 21:08:38       -54.5285      -25.0832\n
Run Code Online (Sandbox Code Playgroud)\n\n

一试:

\n\n
library(sf)\ndt = data.table(date = c("2018-01-16 22:02:37",\n                         "2018-01-16 22:54:00", \n                         "2018-01-16 23:08:38"),\n                lat = c(-54.5010,\n                        -54.5246,\n                        -54.5285),\n                long = c(-25.0433, \n                         -25.0929,\n                         -25.0832))\n\nsdf = st_as_sf(dt, coords = c("long", "lat"), crs = …
Run Code Online (Sandbox Code Playgroud)

timezone r localtime latitude-longitude lubridate

6
推荐指数
1
解决办法
2236
查看次数