R strptime到00h00格式

时间:2016-10-01 23:14:36

标签: r strptime

我怎样才能像#34; 15/09/2016 20h26"?

我在strptime官方手册上搜索了这个并且堆栈溢出,但我找不到任何可以帮助我的东西。

我试过这段代码:

u <- ("15/09/2016 20h26")
strptime(u, format = "%d/%m/%Y %H:%M")

strptime(u, format = "%d/%m/%Y %H'h'%M")

任何人都知道我需要做什么?

编辑:

首先,对于问题的清晰性感到抱歉。

我试图用一个样本来描述我的问题,但这似乎是一个错字。

我有一个txt文件,其中有400个时间观察格式&#34; 20/01/2016 14h00&#34;。我试图用strptime将其转换为日期:

这是我的代码:

y <- read.table('materias_data.txt', sep = ";")
l <- strptime(y, format = "%d/%m/%Y %Hh%M")

运行代码时出现此错误:

  

strptime错误(y,格式=&#34;%d /%m /%Y%Hh%M&#34;):输入字符串是   太久了

如何正确转换data.frame?

编辑2:解决方案

阅读评论我意识到问题所在:

strptime并不适用于data.frame,但它适用于角色。

解决此问题的步骤是

y <- read.table('materias_data.txt', sep = ";")
l <- strptime(y[,1], format = "%d/%m/%Y %Hh%M")
df <- data.frame(l)

谢谢

2 个答案:

答案 0 :(得分:2)

我添加到ATA_PASS_THROUGH_EX的相对较新的anytime软件包会在没有额外帮助的情况下自动解析:

R> anytime("15/09/2016 20h26")
[1] "2016-09-15 20:26:00 CDT"
R> 

另一个不错的功能是它还会自动从factor(或ordered)转换为character

因此,如果您有一个data.frame df,其中包含一列这样的值,比如名为datestr的列,那么只需传递一列:

R> anytime( df[, "datestr"] )

您也可以将其分配给data.frame中的新列:

R> df[, "parsedtime"] <- anytime( df[, "datestr"] )

答案 1 :(得分:0)

使用dplyr&#39; mutate来应用转换数据。框架方式,或使用其中一个应用函数:

y <- y %>% mutate(col_name = as.POSIXct(col_name, format = "%d/%m/%Y %Hh%M"))
# or
parsed <- sapply(y$col_name, strptime, format = "%d/%m/%Y %Hh%M")