秘密字符日期至POSIXct

时间:2018-10-25 17:29:19

标签: r posixct

我从RNCEP软件包中导入了一些数据,其中包括日期时间戳记(以UTC表示):

> head(df.weather[1])
       datetime
1 2018_06_01_00
2 2018_06_01_00
3 2018_06_01_00
4 2018_06_01_00
5 2018_06_01_00
6 2018_06_01_00

年,月,日和小时之间用下划线分隔。

我想将这些日期更改为POSIXct,我可以使用以下方法获取日期:

df.weather$date<-as.POSIXct(
  str_replace_all(df.weather$datetime, "_", "-"), 
  format="%Y-%m-%d") 
head(df.weather[11])
       date
1 2018-06-01
2 2018-06-01
3 2018-06-01
4 2018-06-01
5 2018-06-01
6 2018-06-01

但是,如果我将格式更改为“%Y-%m-%d%H”或“%Y-%m-%d%H:%M”,则会得到以下信息:

  date
1 <NA>
2 <NA>
3 <NA>
4 <NA>
5 <NA>
6 <NA>

如何调整代码以将小时信息输入POSIXct变量?

2 个答案:

答案 0 :(得分:2)

显示日期时间值的功能很生硬,不显示午夜时间的分钟,秒或小时:

# First build a test vector of character values
 times <- scan(text="2018_06_01_00
  2018_06_01_00
  2018_06_01_00
  2018_06_01_00
  2018_06_01_00
  2018_06_01_00", what="")
#Read 6 items

# Now run your code
 realTimes<-as.POSIXct(
  str_replace_all(times, "_", "-"), 
  format="%Y-%m-%d") 
 realTimes

#[1] "2018-06-01 PDT" "2018-06-01 PDT" "2018-06-01 PDT" "2018-06-01 PDT"
#[5] "2018-06-01 PDT" "2018-06-01 PDT"

 dput(realTimes)
structure(c(1527836400, 1527836400, 1527836400, 1527836400, 1527836400, 
1527836400), class = c("POSIXct", "POSIXt"), tzone = "")

@ANG的评论很有用(建议使用format =“%Y_%m_%d_%H”而不是比较笨拙的str_replace形式的“-”),但他也错过了核心问题

答案 1 :(得分:1)

您可以尝试这个as.POSIXct(strptime("2010_10_31_01", "%Y_%m_%d_%H"))。可能您想使用tz参数添加时区。如果如您的示例中的小时等于00,则时间将被自动剥离。使用01尝试相同的代码。