【问题标题】:Convert fraction of day to POSIX times in R [duplicate]在R中将一天的分数转换为POSIX时间[重复]
【发布时间】:2011-02-01 22:29:08
【问题描述】:

我有一个将日期时间编码为两个单独变量的数据集。通常,我只是将它们粘贴到as.POSIXct 中并继续。但是,日期以字符串形式提供,一天中的时间是 24 小时的一小部分 - 例如,中午 12 点是 0.5,上午 9:30 是 0.1458333,等等。

将小数天数转换为时钟小时数似乎并不那么棘手,但如果可能的话,我更喜欢使用预先存在的函数。类似的东西存在于基础 R 中吗?一个包裹?

如果有什么用,这是通过 RODBC 导入 R 的 Excel (xlsx) 时间字段。

编辑 奇怪的是,在重新审视这个问题时,时间现在被读作 POSIXct。不知道该怎么做。

【问题讨论】:

  • 哈哈。这听起来像是我阅读 xls 文件的经验。有一天,我编写了 R 代码以从数字 Excel 日期转换,然后一周后我用一些新数据编辑 xls,当我在 R 中读取它时,日期是文本。您可以在 Excel 中使用单元格格式来修复它。
  • 如果您在 Excel 中将自定义格式应用于日期时间,则文本 csv 文件中的值将遵循该格式。我建议使用“yyyy-mm-dd hh:mm:ss AM/PM”或“yyyy-mm-dd hh:mm:ss”。我没有配置 RODBC,因此无法测试是否会影响数据库传输。

标签: excel datetime r


【解决方案1】:

R News 4/1Help Desk 文章有一节介绍在 R 中读取 Excel 日期。

【讨论】:

    【解决方案2】:

    POSIXct 值只是自格林威治标准时间 1970 年 1 月 1 日午夜以来的秒数。 (所以你需要注意你与UTC的偏移量。)你可以使用日期部分并将天数乘以24 * 3600(as.Date(dtval)到你的时间值* 24 * 3600。Gabor指出R News 上的文章(他写的,谢谢你,Gabor。)

    你没有给出字符串的例子。如果您将日期作为字符串获取,那么当变量“strDate”为“YYYY-MM-DD”或“YYYY/MM/DD”格式时,它会将变量“strDate”转换为日期类。否则格式化代码在 ?strptime 页面上。

    一旦你有了一个 POSIXct 分类的变量,你就可以添加秒数。此示例将 30 分钟添加到 2011 年 2 月 1 日今天的午夜(在我的时区 UTC-5 中):

    > as.POSIXct(as.Date("2011-02-01")) +30*60
    [1] "2011-01-31 19:30:00 EST"
    

    这是你的时间值添加到我的时间午夜:

    > as.POSIXct(as.Date("2011-02-01 00:00", tzone="UTC"))+3600*5 + 3600*24*timeval
    [1] "2011-02-01 03:29:59 EST"
    

    【讨论】:

    • 我不明白这个。第二个代码块中的timeval 是什么?
    • 这是您分配 0.1458333 值的任何名称。你将它乘以一天中的秒数。
    • 谢谢。我使用这个想法来进行逆运算:将 posixCT 时间更改为小数天数:(timeval-as.POSIXct(...))/86400。它对于在除 Hz 之外的其他时基(例如每天的周期数)中进行时间序列分析非常有用。
    猜你喜欢
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 2015-04-22
    相关资源
    最近更新 更多