如何将特定时间格式转换为R中的时间戳?

Sor*_*osh 6 formatting r date posixct

我正在研究UCI的"人员活动数据集的本地化数据"数据集,在这个数据集中有一列日期和时间(均在一列中),格式如下:

27.05.2009 14:03:25:777
27.05.2009 14:03:25:183
27.05.2009 14:03:25:210
27.05.2009 14:03:25:237
...
Run Code Online (Sandbox Code Playgroud)

我想知道是否有使用R将此列转换为时间戳.

Wal*_*cio 11

首先,我们需要用毫秒替换从秒到毫秒的冒号,否则最后一步将无法工作(感谢Dirk Eddelbuettel这个).因为在最后R将使用它想要的分隔符,为了更快,我将继续并将所有冒号替换为点:

x <- "27.05.2009 14:03:25:777"  # this is a simplified version of your data
y <- gsub(":", ".", x)          # this is your vector with the aforementioned substitution
Run Code Online (Sandbox Code Playgroud)

顺便说一下,这就是你的矢量应该照顾的方式gsub:

> y
[1] "27.05.2009 14.03.25.777"
Run Code Online (Sandbox Code Playgroud)

现在,为了让它显示毫秒,你首先需要调整一个R选项,然后使用一个名为的函数strptime,它将你的日期向量转换为POSIXlt(一种R友好的)格式.只需执行以下操作:

> options(digits.secs = 3)           # this tells R you want it to consider 3 digits for seconds.
> strptime(y, "%d.%m.%Y %H:%M:%OS")  # this finally formats your vector
[1] "2009-05-27 14:03:25.777"
Run Code Online (Sandbox Code Playgroud)

我在这里学到了很好的技巧.另一个答案也说你可以跳过options设置和使用,例如strptime(y, "%d.%m.%Y %H:%M:%OS3"),但它不适合我.Henrik注意到该函数的帮助页面?strptime指出该%OS3位与操作系统有关.我正在使用更新的Ubuntu 13.04并使用%OS3收益率NA.

使用时strptime(或其他与POSIX相关的功能as.Date),请记住一些最常用的转换(为简洁而编辑,如DWin.完整列表所示strptime):

  • %a 当前语言环境中缩写的工作日名称.
  • %A 当前语言环境中的完整工作日名称.
  • %b 当前语言环境中的缩写月份名称.
  • %B 当前区域设置中的完整月份名称.
  • %d 十进制数字(01-31).
  • %H小时数十进制数(00-23).24:00:00的时间被接受输入.
  • %I 小时数十进制数(01-12).
  • %j 十进制数字(001-366)的一年中的某一天.
  • %m 月份为十进制数字(01-12).
  • %M 分钟为十进制数(00-59).
  • %p区域设置中的AM/PM指示符.与...一起使用%I而不是与之一起使用%H.
  • `%S秒作为十进制数(00-61),允许最多两个闰秒(但POSIX兼容的实现将忽略闰秒).
  • %U一年中的一周作为十进制数(00-53),使用星期日作为一周的第一天1(并且通常以一年的第一个星期日作为第1周的第1天).美国大会.
  • %w 工作日为十进制数(0-6,星期日为0).
  • %W使用星期一作为一周的第一天(并且通常以一年的第一个星期一作为第1周的第1天)作为十进制数(00-53)的一周中的一周.英国大会.
  • %y没有世纪的年份(00-99).输入时,值00到68的前缀为20,而69到99的前缀为19
  • %Y与世纪的一年.请注意,虽然原始公历中没有零,但ISO 8601:2004将其定义为有效(解释为1BC)

  • a)你不需要`as.Date()`的长格式.b)在`strptime()`周围包装`as.POSIXct()`,你得到更紧凑的POSIXct.c)你错过了亚秒.这需要一个`gsub()`或其他东西,因为格式需要一个点; 结肠不起作用. (4认同)
  • 我认为从帮助页面发布整个转换格式表是浪费空间.最好只链接到有人可以找到它的页面或只是`?strptime`. (3认同)
  • 关于"`strptime(y,"%d.%m.%Y%H:%M:%OS3")`,但它对我不起作用",另见"?strptime"中的示例注释:`##时间到亚秒精度(**如果OS支持**); format(Sys.time(),"%H:%M:%OS3")`. (3认同)
  • 我确实建议了替代品.如果`?strptime`失败,则R安装被破坏. (2认同)