R 中的单独日期和时间

问题描述 投票:0回答:1

我的数据集包含日期和时间作为“字符”类(列“有效”)。我想将此列分成两列,一列用于日期,一列用于时间。但应保留值(不变)。 这是从 head(data, 10) 获得的数据的前 10 个输出

> head(data, 10)
   station            valid speed
1     PHNL 2021-01-01 00:00 14.95
2     PHNL 2021-01-01 00:05 21.85
3     PHNL 2021-01-01 00:10 17.25
4     PHNL 2021-01-01 00:15 19.55
5     PHNL 2021-01-01 00:20 16.10
6     PHNL 2021-01-01 00:25 17.25
7     PHNL 2021-01-01 00:30 12.65
8     PHNL 2021-01-01 00:35 17.25
9     PHNL 2021-01-01 00:40 18.40
10    PHNL 2021-01-01 00:45 17.25

我使用 as.POSIXct 并且得到了我预期的日期结果,但时间列只是 00:00,这意味着时间没有像原始列中那样更新。我应该如何解决这个问题?请帮助并提前感谢您。

data$date=as.Date(data$valid) 
data$time=format(as.POSIXct(data$valid),
                 format="%H:%M")

结果

  station            valid speed       date  time
1    PHNL 2021-01-01 00:00 14.95 2021-01-01 00:00
2    PHNL 2021-01-01 00:05 21.85 2021-01-01 00:00
3    PHNL 2021-01-01 00:10 17.25 2021-01-01 00:00
4    PHNL 2021-01-01 00:15 19.55 2021-01-01 00:00
5    PHNL 2021-01-01 00:20 16.10 2021-01-01 00:00
6    PHNL 2021-01-01 00:25 17.25 2021-01-01 00:00
r datetime time datetime-format lubridate
1个回答
0
投票

这里有几种方法:

# load libraries
pacman::p_load(tidyverse, hms)

# create it as a tibble, so we can see the column types
read.table(text =
"    station            valid speed
1     PHNL '2021-01-01 00:00' 14.95
2     PHNL '2021-01-01 00:05' 21.85
3     PHNL '2021-01-01 00:10' 17.25
4     PHNL '2021-01-01 00:15' 19.55
5     PHNL '2021-01-01 00:20' 16.10
6     PHNL '2021-01-01 00:25' 17.25
7     PHNL '2021-01-01 00:30' 12.65
8     PHNL '2021-01-01 00:35' 17.25
9     PHNL '2021-01-01 00:40' 18.40
10    PHNL '2021-01-01 00:45' 17.25", header = TRUE) |> as_tibble() -> df

mutate(df, valid = as.POSIXct(valid, format = "%Y-%m-%d %H:%M"),
           date = as.Date(valid), 
           time = format(valid, "%H:%M"))

# or
mutate(df, valid = as_datetime(valid, format = "%Y-%m-%d %H:%M"),
              date = as_date(valid), 
              time = as_hms(format(valid, "%H:%M:%S")))

输出:

# A tibble: 10 × 5
   station valid               speed date       time  
   <chr>   <dttm>              <dbl> <date>     <time>
 1 PHNL    2021-01-01 00:00:00  15.0 2021-01-01 00'00"
 2 PHNL    2021-01-01 00:05:00  21.8 2021-01-01 05'00"
 3 PHNL    2021-01-01 00:10:00  17.2 2021-01-01 10'00"
 4 PHNL    2021-01-01 00:15:00  19.6 2021-01-01 15'00"
 5 PHNL    2021-01-01 00:20:00  16.1 2021-01-01 20'00"
 6 PHNL    2021-01-01 00:25:00  17.2 2021-01-01 25'00"
 7 PHNL    2021-01-01 00:30:00  12.6 2021-01-01 30'00"
 8 PHNL    2021-01-01 00:35:00  17.2 2021-01-01 35'00"
 9 PHNL    2021-01-01 00:40:00  18.4 2021-01-01 40'00"
10 PHNL    2021-01-01 00:45:00  17.2 2021-01-01 45'00"

有任何问题欢迎评论!

© www.soinside.com 2019 - 2024. All rights reserved.