R - 给定奥尔森时区的 UTC 到 LOCAL 时间

2023-12-12

我有 1974-2013 年的时间序列数据,其中有一列为 datetimeUTC (YYYY-MM-DD hh:mm +0000),一列为 Olson 格式的时区(例如,加拿大/太平洋、加拿大/东部)。我可以将整个 UTCdatetime 列转换为公共时区,如下所示:

dataset$datetimeEST <- strptime(
  dataset$datetimeUTC, format="%Y-%m-%d %H:%M:%S%z", tz="Canada/Eastern"
)  

我如何转换datetimeUTC to datetimeLOCAL,给定每行相应的时区?

让我退后一点。我有来自全国各地(6 个时区)的数据,格式为 1974-2013 年的 ISO8601 表示形式。时间戳全年均采用当地标准时间(即,即使该地区的民用时间遵守 DST,也将忽略 DST)。我需要进行日期时间计算,这在 UTC 时间中可能是最安全的,所以这很容易。但是,我还需要提取特定民用时间段的数据,考虑 DST,并为该子集数据进行计算和绘图(例如,所有 6 个时区位置的高峰时间的所有数据)。

我在下面计算的 datetimeCLOCKTIME 似乎正在做我想要的绘图,但在进行日期时间计算时给出了错误的答案,因为它将日期时间存储在我的本地计算机的时区中,而没有实际转换时间。 @thelatemail 提供的解决方案正是我正在寻找的,但我无法让它在 Windows 中的 2012 年测试数据集上运行(见下文)。另外,我使用 strptime 转换为 POXITlt,他的解决方案在 POXITct 中。我是 R 新手,因此我们将不胜感激任何帮助。

测试数据集:

    dataset <- data.frame (timestampISO8601 = c("2012-04-25T22:00:00-08:00","2012-04-25T22:15:00-08:00","2012-04-25T22:30:00-08:00","2012-04-25T22:45:00-08:00","2012-04-25T23:00:00-08:00","2012-04-25T23:15:00-08:00","2012-04-25T23:30:00-08:00","2012-04-25T23:45:00-08:00","2012-04-26T00:00:00-08:00","2012-04-26T00:15:00-08:00","2012-04-26T00:30:00-08:00","2012-04-26T00:45:00-08:00","2012-04-26T01:00:00-08:00","2012-04-26T01:15:00-08:00","2012-04-26T01:30:00-08:00","2012-04-26T01:45:00-08:00","2012-04-26T02:00:00-08:00","2012-04-25T22:00:00-03:30","2012-04-25T22:15:00-03:30","2012-04-25T22:30:00-03:30","2012-04-25T22:45:00-03:30","2012-04-25T23:00:00-03:30","2012-04-25T23:15:00-03:30","2012-04-25T23:30:00-03:30","2012-04-25T23:45:00-03:30","2012-04-26T00:00:00-03:30","2012-04-26T00:15:00-03:30","2012-04-26T00:30:00-03:30","2012-04-26T00:45:00-03:30","2012-04-26T01:00:00-03:30","2012-04-26T01:15:00-03:30","2012-04-26T01:30:00-03:30","2012-04-26T01:45:00-03:30","2012-04-26T02:00:00-03:30"), olson = c("Canada/Pacific","Canada/Pacific","Canada/Pacific","Canada/Pacific","Canada/Pacific","Canada/Pacific","Canada/Pacific","Canada/Pacific","Canada/Pacific","Canada/Pacific","Canada/Pacific","Canada/Pacific","Canada/Pacific","Canada/Pacific","Canada/Pacific","Canada/Pacific","Canada/Pacific","Canada/Newfoundland","Canada/Newfoundland","Canada/Newfoundland","Canada/Newfoundland","Canada/Newfoundland","Canada/Newfoundland","Canada/Newfoundland","Canada/Newfoundland","Canada/Newfoundland","Canada/Newfoundland","Canada/Newfoundland","Canada/Newfoundland","Canada/Newfoundland","Canada/Newfoundland","Canada/Newfoundland","Canada/Newfoundland","Canada/Newfoundland"), value = c(0,0,1,2,5,11,17,19,20,19,17,11,5,2,1,0,0,-3,-3,-2,-1,2,8,14,16,17,16,14,8,2,-1,-2,-3,-3), stringsAsFactors=FALSE)

从 UTC 偏移量中删除“:”。 (R 期望 UTC 偏移量的格式为 nnnn):

    dataset$timestampR<- paste(substr(dataset$timestampISO8601,1,22),substr(dataset$timestampISO8601,24,25),sep="")

当转换为 UTC 时间时,R 默认为 UTC 偏移量 -ve,使时间戳中的 -ve 偏移量为正:

    dataset$datetimeUTC <- strptime(dataset$timestampR, format="%Y-%m-%dT%H:%M:%S%z", tz="UTC")

当像这样转换为机器时间时,R 读取输入时间并将其转换为本地机器时区的时间 - 在我的例子中,这是加拿大/东部:

    dataset$datetimeMACHINE <- strptime(dataset$timestampR, format="%Y-%m-%dT%H:%M:%S%z")

当像这样转换为 CLOCKTIME 时间时,R 读取输入时间并分配本地计算机的时区(当前在我的计算机上为 EDT),而不进行任何时间转换:

    dataset$datetimeCLOCKTIME <- strptime(dataset$timestampR,format="%Y-%m-%dT%H:%M:%S")

查看数据集的结构:

    str(dataset)  

绘图行为不同

    library(ggplot2)
    qplot(data=dataset,x=datetimeUTC,y=value)
    qplot(data=dataset,x=datetimeMACHINE,y=value)
    qplot(data=dataset,x=datetimeCLOCKTIME,y=value)

计算结果不同。 datetimeCLOCKTIME 的计算结果不正确:

    range (dataset$datetimeUTC)
    range (dataset$datetimeMACHINE)
    range (dataset$datetimeCLOCKTIME)

    dataset$datetimeUTC[34] - dataset$datetimeUTC[1]
    dataset$datetimeMACHINE[34] - dataset$datetimeMACHINE[1]
    dataset$datetimeCLOCKTIME[34] - dataset$datetimeCLOCKTIME[1]

您可以来回格式化一下以获得字符格式的本地时间表示形式。例如。:

dataset <- data.frame(
  datetimeUTC=c("2014-01-01 00:00 +0000","2014-01-01 00:00 +0000"),
  olson=c("Canada/Eastern", "Canada/Pacific"),
  stringsAsFactors=FALSE
)

#             datetimeUTC          olson
#1 2014-01-01 00:00 +0000 Canada/Eastern
#2 2014-01-01 00:00 +0000 Canada/Pacific

dataset$localtime <- with(dataset, 
     mapply(function(dt,ol) format(
              as.POSIXct(dt,"%Y-%m-%d %H:%M %z",tz=ol),
              "%Y-%m-%d %H:%M %z"), 
              datetimeUTC, olson
            )
     )

#             datetimeUTC          olson              localtime
#1 2014-01-01 00:00 +0000 Canada/Eastern 2013-12-31 19:00 -0500
#2 2014-01-01 00:00 +0000 Canada/Pacific 2013-12-31 16:00 -0800
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R - 给定奥尔森时区的 UTC 到 LOCAL 时间 的相关文章

  • R - 正则表达式错误(PCRE 版本)

    我正在尝试使用koRpus在 R 中在运行 RHEL6 的 Linux 服务器上进行词形还原 上周 当我安装了 MRO Microsoft R Open 3 2 3 时 下面的代码效果很好 library koRpus lw c danci
  • 从网络源获取 R 中的数据作为数据框

    我正在尝试使用 RCurl 包将一些空气污染背景数据作为 data frame 直接加载到 R 中 该网站有 3 个下拉框 用于在下载 csv 文件之前选择选项 如下图所示 我试图从下拉框中选择 3 个值 并使用 下载 CSV 按钮将数据作
  • R从列表中提取数据框,列名中没有前缀

    我在列表中放置了一个数据框 然后 当尝试将其提取回来时 我得到了该数据帧的所有以列表键为前缀的列名称 有没有办法完全按照最初传递的方式提取数据帧 cols lt c column1 Column2 Column3 df1 lt data f
  • 将summary()写入as.data.frame以在ggplot / R中使用

    请查找 af 数据样本t below 我正在使用以下方法进行竞争风险分析etmCIF来自etm package 产生以下结果 这很好 但需要更好的图形 曾经有一个ggtrans etm函数将数据导入ggplot 然而 这个功能显然被删除了
  • R 中的 NA 替换函数

    我正在尝试替换矩阵中的 NA mat 零 我在用着mat is na mat lt 0 当我有 18946 个变量的 94531 个观察值或更小的矩阵时 效果很好 但我在 22752 个变量的 112039 个观察值的矩阵上尝试它 R 显示
  • 用于清除工作空间和转储存储的 R 全局函数

    我希望创建一个全局函数来清除我的工作区并转储我的内存 我将我的函数称为 cleaner 并希望它执行以下代码 remove list ls gc 我尝试在全局环境中创建该函数 但是当我运行它时 控制台仅打印该函数的文本 在我要获取的函数文件
  • 在 mac (iMac OSX ) 终端中远程运行脚本(r 脚本)到其他计算机

    我有一个小示例脚本 script p r 如下所示 打算在终端中运行 usr bin Rscript sink output capture txt mn lt mean 1 10 and so on much longer list of
  • 如何在不循环的情况下添加组ID?

    我有数据框 例如 productid ordernum p1 10 p2 20 p3 30 p4 5 p5 20 p6 8 我想添加另一列 称为 groupid 它将产品按顺序分组在一起 一旦 sum ordernum 达到 30 分配一个
  • 计算从给定日期开始的月份中的第几天?

    我正在努力寻找一种简单有效的解决方案来计算每月的工作日 例如 如果给定日期是第一个星期一Monday 5th March 2018然后我想获取接下来 6 个月每个月第一个星期一的日期 例如 Monday 2nd April 2018 and
  • 在函数内部调用 clusterApply 时,性能会下降

    我遇到了一个奇怪的问题clusterApply 我已经能够尽可能地隔离它 如下所示 首先 我从全局环境运行以下代码 require parallel cl lt makeCluster rep localhost 20 SOCK xl lt
  • dplyr,do(),从模型中提取参数而不丢失分组变量

    R 帮助中关于 do 的示例略有不同 by cyl lt group by mtcars cyl models lt by cyl gt do mod lm mpg disp data coefficients lt models gt d
  • SimpleDateFormat 将 lenient 设置为 false 时出现异常

    为什么这段代码会抛出无法解析日期的异常 SimpleDateFormat f new SimpleDateFormat yyyy MM dd T HH mm ss 000Z f setLenient false String dateStr
  • 在 R 中绘制对数正态概率密度

    我正在尝试在 R 中生成对数正态概率密度图 其中包含 3 个不同的均值对数和标准差对数 我尝试了以下方法 但我的图表太丑了 看起来一点也不好看 x lt seq 0 10 length 100 a lt dlnorm x meanlog 0
  • 将函数应用于 3d 数组的每一层,返回一个数组

    假设您有一个包含行 列和层的 3 维数组 A lt array 1 27 c 3 3 3 想象你有一个函数 它接受一个矩阵作为输入并返回一个矩阵作为输出 就像t 如何将该函数应用于数组的每一层 返回与第一层大小相同的另一个数组 我觉得我应该
  • 为绘图制作 2D 图例 - 双变量分区统计图

    我一直在玩双变量 choropleth 地图 并且一直在如何创建类似于 2d 图例的问题上陷入困境约书亚 史蒂文斯 http www joshuastevens net cartography make a bivariate chorop
  • 如何将此“for”循环转换为向量解

    这个问题与 将嵌入其他文本的长州名称转换为两个字母的州缩写 https stackoverflow com questions 25582518 convert long state names embedded with other te
  • 解析时区并转换为夏令时

    我有一个 pandas 数据框Datetime column Datetime 0 2019 01 01 17 02 00 1 2019 01 01 17 03 00 2 2019 01 01 17 04 00 3 2019 01 01 1
  • ggplot散点图中的图例问题

    我想使用 ggplot 创建显示方法比较数据的散点图 绘图应包含原始数据 理想线和带误差的拟合线 图例应显示理想线和拟合线的线型 线宽 线颜色 我可以获得大部分我想要的东西 但是图例存在以下问题 图例显示每种线型有 2 条线 为什么 如何解
  • 为什么 geom_boxplot 比基本箱线图识别更多异常值?

    这是一个可重复的示例 与基本箱线图相比 最后一个治疗组又发现了一个异常值 dta lt structure list Treatment c A A A A A A A A A A A A A A A A B B B B B B B B B
  • ggplot2、R 中的单条形条形图

    我有以下数据和代码 gt ddf var1 var2 1 aa 73 2 bb 18 3 cc 9 gt gt dput ddf structure list var1 c aa bb cc var2 c 73L 18L 9L Names

随机推荐

  • WPF 中的依赖属性使用

    我很难找出依赖属性的充分理由 为什么 System Controls TextBox Text 属性是依赖属性而不是普通属性 作为依赖属性有什么好处 我想要完成的事情之一是将 ValidationRules 属性添加到我的 UserCont
  • Android N 要求 IDE 运行 Java 1.8 或更高版本?

    My XML布局未呈现并显示此错误消息 我已经在使用 Java 8 还使用 Gradle 中最新的构建工具 android compileSdkVersion android N buildToolsVersion 24 0 0 rc1 X
  • 示例请求:nant-contrib 的 任务

    谁能给我提供一个示例构建文件 演示如何使用 nant contrib 任务创建 Web 应用程序项目的安装程序 这个
  • 从 URL 下载文件到服务器

    嗯 这看起来很简单 确实如此 要将文件下载到服务器 您所需要做的就是 file put contents Tmpfile zip file get contents http someurl file zip 只有一个问题 如果您有一个大文
  • Phonegap 中 Android 的应用程序图标 [重复]

    这个问题在这里已经有答案了 我有一个 HTML5 Javascript 应用程序 并且我使用 PhoneGap 的构建服务为我的 Android 生成 APK 文件 我在我的 Android 上成功安装了 APK 文件 一切都很好 只是手机
  • 所有分区的eekToEnd并在Kafka消费者的自动重新平衡中幸存

    当消费者组 A 的 Kafka 消费者连接到 Kafka 代理时 我想查找所有分区的末尾 即使偏移量存储在代理端 如果有更多额外的消费者连接同一消费者组 他们应该获取最新存储的偏移量 我正在做以下事情 consumer poll timeo
  • 检测到互联网连接时下载数据

    我想在互联网连接可用时下载一些数据 包括 json 和图像 二进制数据 我有一个完整的工作代码可以做到这一点 问题是我已经在自定义应用程序类中编写了该代码 它会下载它并保存在本地 但是当应用程序启动时 互联网连接可能在那时不可用 因此 我想
  • 如何更改 iframe 的方向

    就我而言 我已将另一个组织 是的 我被授权这样做 开发的 html 游戏嵌入到网站中 页面和 HTML 游戏文件位于同一域中 该游戏是为支持 iPad 而开发的 但仅限横向 然而 在 iframe 中 它总是显示 请使用横向方向 的消息 即
  • 从命令行守护程​​序使用 MLMediaLibrary 时出现 XPC 错误

    我正在编写一个命令行守护程 序来从 iPhoto 读取图像 我可以初始化并加载MLMediaLibrary从使用 Xcode 项目创建工具创建的成熟 Cocoa 应用程序中得到的结果很好 但是 当我尝试从命令行工具 也在 Xcode 中创建
  • PHP脚本中的内存泄漏

    我有一个 php 脚本 它运行 mysql 查询 然后循环结果 并在该循环中还运行多个查询 sqlstr SELECT FROM user pred WHERE uprType 2 AND uprTurn turn ORDER BY upr
  • 如何根据动态变量进行匹配?

    是否可以匹配动态变量而不仅仅是文字 在此代码中 第一个match应该和注释掉的一样match number 0 being 0 and number 1 being 1 const NUMBERS i8 2 0 1 fn test let
  • 使用 Python 代替 AppleScript

    我经常使用 Applescript 来完成基本任务 例如打开和关闭程序 有时会更深入一些 例如运行特定 Xcode 程序的单元测试 我正在学习Python 我喜欢它 我还没有找到太多有关 AppleScript 和 Python 的文档 我
  • Hadoop 中的 setJarByClass()

    在 Hadoop 算法的驱动程序方法中的某个时刻 我们将作业链接到设置为 Mapper 和Reducer 的类的引用 例如 job setMapperClass MyMapper class job setReducerClass MyRe
  • 如何将 Python2 中的 all: print "string" 替换为:Python3 中的 print("string")? [复制]

    这个问题在这里已经有答案了 正如标题所说 如何将 Python2 中的 all print string 替换为 Python3 中的 print string I really希望他们使这一功能向后兼容 官方推荐使用 2to3 py 脚本
  • 使用实体框架自引用树的最有效方法

    所以我有一个 SQL 表 基本上是 ID ParentID MenuName Lineage Depth 最后两列是自动计算的 以帮助搜索 因此我们现在可以忽略它们 我正在创建一个具有多个类别的下拉菜单系统 不幸的是 我认为 EF 不能很好
  • 使用 xslt 排序对给定顺序进行排序

    我在用着
  • 从 Firebase 获取一个值并将其更新为当前值 + 1

    所以是的 标题有问题 一些信息 这是我的 Firebase 数据库的样子 这是当前的代码 export function updateQTY barcode database ref items barcode update qty cur
  • 如何检测无符号整数溢出?

    I was writing a program in C to find all solutions of ab c where a b and c together use all the digits 0 9 exactly once
  • 替换 pandas dataframe 列中的前 n 个元素

    我想更换第一个n我的数据框中的一列元素与我保存的另一个 pd series 举个例子 category price store testscore 0 Cleaning 11 42 Walmart NaN 1 Cleaning 23 50
  • R - 给定奥尔森时区的 UTC 到 LOCAL 时间

    我有 1974 2013 年的时间序列数据 其中有一列为 datetimeUTC YYYY MM DD hh mm 0000 一列为 Olson 格式的时区 例如 加拿大 太平洋 加拿大 东部 我可以将整个 UTCdatetime 列转换为