在 R 中使用 as.POSIXct 为相同的字符结构提供 na

Posted

技术标签:

【中文标题】在 R 中使用 as.POSIXct 为相同的字符结构提供 na【英文标题】:Using as.POSIXct in R giving na for identical character structures 【发布时间】:2014-02-05 06:14:47 【问题描述】:

我有两个字符形式的时间戳,我想在 R 中转换为 POSIX 格式。 timestamps 是:

1: "2013-03-30 17:45:00"

2: "2013-03-31 02:05:00"

第一个转换得很好,第二个给我NAtimestampsSQL server 下载为characters。有人知道出了什么问题吗?

我没有附上屏幕截图的声誉,因此此处提供了显示结果的 R 控制台屏幕截图:http://emillarsen.com/r%20console.jpg

【问题讨论】:

它对我来说很好用。可能是您的 data.frame 将字符串作为因素吗?如果有帮助,请尝试将as.character 添加到通话中。 a="2013-03-31 02:05:00"; as.POSIXct(as.character(a), format = "%Y-%m-%d %H:%M:%S") 您的语言环境是什么?那天英国开始实行夏令时。 只需将时区设置为没有 DST 的时区,例如 tz="GMT"。我的一般建议是始终明确设置 tz 参数。 感谢 Roland,成功了! 【参考方案1】:

看起来像是 DST 问题。我从你的名字假设你来自Sweden 或附近。在 2013 年 3 月 31 日凌晨 2 点到 3 点之间,瑞典没有时间,因为那时时钟正在前进。

as.POSIXct("2013-03-31 02:05:00",format="%Y-%m-%d %H:%M:%S", tz="Europe/Stockholm")
[1] NA

这适用于中欧时间 (CET) 的任何人。

【讨论】:

【参考方案2】:

它对我有用。正如论坛中的人所评论的 - 可能是TimeZone 问题。但是我已经添加了这样做的方法。 将字符值转换为 POSIXct 的一种方法:

  dates <- c("1992-02-27", "1992-02-27", "1992-01-14", "1992-02-28", "1992-01-02")
  times <- c("23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26")
  X <- paste(dates, times)

  str(x)
  chr [1:5] "1992-02-27 23:03:20" "1992-02-27 22:29:56" ...

  dt <- strptime(x, "%Y-%m-%d %H:%M:%S")
  dt
[1] "1992-02-27 23:03:20" "1992-02-27 22:29:56" "1992-01-14 01:03:30"
[4] "1992-02-28 18:21:03" "1992-01-02 16:56:26"  

  str(dt) 
  POSIXlt[1:5], format: "1992-02-27 23:03:20" "1992-02-27 22:29:56" ...  

另一种方式:当你接近时

> now <- Sys.time()
> now
[1] "2014-01-16 16:58:23 IST"
> as.POSIXlt(as.character(now),tz="GMT")
[1] "2014-01-16 17:05:24 GMT"
> str(as.POSIXlt(now))
 POSIXlt[1:1], format: "2014-01-16 16:58:23"
> unclass(as.POSIXlt(now))
$sec
[1] 23.1636

$min
[1] 58

$hour
[1] 16

$mday
[1] 16

$mon
[1] 0

$year
[1] 114

$wday
[1] 4

$yday
[1] 15

$isdst
[1] 0

attr(,"tzone")
[1] ""    "IST" "IST"

【讨论】:

【参考方案3】:

好吧,我也遇到了同样的问题。

我发现解决该问题的一种方法是在tz="GMT" 中更改为GMT 我的Timezone

as.POSIXct(x = c("2013-03-31 02:05:00"),
           format="%Y-%m-%d %H:%M:%S",
           tz="GMT"
)

# [1] "2013-03-31 02:05:00 GMT"

【讨论】:

以上是关于在 R 中使用 as.POSIXct 为相同的字符结构提供 na的主要内容,如果未能解决你的问题,请参考以下文章

R中从POSIXct到日期的日期转换

在 R 中转换 POSIXct 会在 3.5.0 版中产生 NA [重复]

如何在 R 中解析年 + 周数?

使用 dplyr 包按时间平均 - R

在ggplot中手动缩放X轴,绘制POSIXct。

请问,as.Date(),as.POSIXct()函数都识别不了月份的英文,是为啥呀?