我正在使用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) 我有一个包含很多位置(大约 30.000 个)的数据框,我需要将每个位置的时间转换为当地时间。\n我尝试了一些想法,例如这个和这个。但他们不适合我。
\n\n我有这样的数据:
\n\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))\nRun Code Online (Sandbox Code Playgroud)\n\n我期望这个输出:
\n\ndate 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\nRun Code Online (Sandbox Code Playgroud)\n\n一试:
\n\nlibrary(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)