r - R:将 date/time format 0000-00-00T00:00:00Z 转换为 POSIXct

我有一个从 R 中的数据框中导出为 .csv 的数据集。该数据集包含一个 date+time 列,在将其导出为 .csv 文件之前,将其设置为 format 为 POSIXct。当我将保存的 .csv 文件导入回 R 时,date+time 列的 format 已更改为 character,如下所示:000-00-00T00:00:00Z(请参见我的部分数据的头部下方)。

ID  Timestamp               X_mean      X_min   X_max
1   2021-06-30T08:00:00Z    -0.4313333  -5.914  4.129
2   2021-06-30T08:00:01Z    -0.3817667  -5.641  4.082
3   2021-06-30T08:00:02Z    -0.2770667  -0.484  -0.109
4   2021-06-30T08:00:03Z    -0.3686667  -0.863  -0.148
5   2021-06-30T08:00:04Z    -0.2696667  -0.41   -0.102
6   2021-06-30T08:00:05Z    -0.4150000  -0.734  -0.145

如果可能的话,我真的很想将 date+time 返回到一个 POSIXct 变量,所以它再次看起来像这样:YYYY-MM-DD HH:MM:SS,没有“T”和“Z”。

我已尝试应用 https://stackoverflow.com/questions/21667212/converting-datetime-string-to-posixct-date-time-format-in-r?noredirect=1&lq=1https://stackoverflow.com/questions/65506672/formatting-date-time-in-r 给出的解决方案,但它们似乎不起作用,或者我在更改代码以使其适用时做错了我的数据框。我只以NA结束。

有没有办法可以将 format 改回 POSIXct

回答1

我们可以从 lubridate 使用 ymd_hms

df1$Timestamp <- lubridate::ymd_hms(df1$Timestamp)

回答2

https://cloud.r-project.org/package=anytimeanytime 功能就是为此而设计的:可靠且容易地解析任何(合理的)时间format,无论输入数据类型如何,都需要一个format。我们可以演示一下:

代码

## re-create your data
dat <- read.table(text="ID  Timestamp               X_mean      X_min   X_max
1   2021-06-30T08:00:00Z    -0.4313333  -5.914  4.129
2   2021-06-30T08:00:01Z    -0.3817667  -5.641  4.082
3   2021-06-30T08:00:02Z    -0.2770667  -0.484  -0.109
4   2021-06-30T08:00:03Z    -0.3686667  -0.863  -0.148
5   2021-06-30T08:00:04Z    -0.2696667  -0.41   -0.102
6   2021-06-30T08:00:05Z    -0.4150000  -0.734  -0.145", header=TRUE)

## add a Datetime column
dat$datetime <- anytime::anytime(dat$Timestamp)

## look at dat
dat

输出

> dat <- read.table(text="ID  Timestamp               X_mean      X_min   X_max
+ 1   2021-06-30T08:00:00Z    -0.4313333  -5.914  4.129
+ 2   2021-06-30T08:00:01Z    -0.3817667  -5.641  4.082
+ 3   2021-06-30T08:00:02Z    -0.2770667  -0.484  -0.109
+ 4   2021-06-30T08:00:03Z    -0.3686667  -0.863  -0.148
+ 5   2021-06-30T08:00:04Z    -0.2696667  -0.41   -0.102
+ 6   2021-06-30T08:00:05Z    -0.4150000  -0.734  -0.145", header=TRUE)
> dat$datetime <- anytime::anytime(dat$Timestamp)
> dat
  ID            Timestamp    X_mean  X_min  X_max            datetime
1  1 2021-06-30T08:00:00Z -0.431333 -5.914  4.129 2021-06-30 08:00:00
2  2 2021-06-30T08:00:01Z -0.381767 -5.641  4.082 2021-06-30 08:00:01
3  3 2021-06-30T08:00:02Z -0.277067 -0.484 -0.109 2021-06-30 08:00:02
4  4 2021-06-30T08:00:03Z -0.368667 -0.863 -0.148 2021-06-30 08:00:03
5  5 2021-06-30T08:00:04Z -0.269667 -0.410 -0.102 2021-06-30 08:00:04
6  6 2021-06-30T08:00:05Z -0.415000 -0.734 -0.145 2021-06-30 08:00:05
>

相似文章

随机推荐

最新文章