在R中以正确的顺序将日期时间字符列转换为posixct

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

我已加载数据记录器 csv 文件。这里我包括一个片段。 date_time 列按月/日/年和小时:分钟:秒:

排序
date_time<-c("6/5/22 10:22:01 AM", "6/5/22 10:23:01 AM", "6/5/22 10:24:01 AM", "6/5/22 10:25:01 AM", "6/5/22 10:26:01 AM", "6/5/22 10:27:01 AM",
 "6/5/22 10:28:01 AM", "6/5/22 10:29:01 AM", "6/5/22 10:30:01 AM", "6/5/22 10:31:01 AM", "6/5/22 10:32:01 AM", "6/5/22 10:33:01 AM")
temp<-c(21.296, 22.047, 22.798, 22.422, 22.172, 22.673, 22.360, 22.110, 21.922, 21.797, 21.672, 21.609)

df<-data.frame(date_time,temp)
df

         date_time   temp
1  6/5/22 10:22:01 AM 21.296
2  6/5/22 10:23:01 AM 22.047
3  6/5/22 10:24:01 AM 22.798
4  6/5/22 10:25:01 AM 22.422
5  6/5/22 10:26:01 AM 22.172
6  6/5/22 10:27:01 AM 22.673
7  6/5/22 10:28:01 AM 22.360
8  6/5/22 10:29:01 AM 22.110
9  6/5/22 10:30:01 AM 21.922
10 6/5/22 10:31:01 AM 21.797
11 6/5/22 10:32:01 AM 21.672
12 6/5/22 10:33:01 AM 21.609

date_time 列显示为字符,

str(df)
'data.frame':   12 obs. of  2 variables:
 $ date_time: chr  "6/5/22 10:22:01 AM" "6/5/22 10:23:01 AM" "6/5/22 10:24:01 AM" "6/5/22 10:25:01 AM" ...
 $ temp     : num  21.3 22 22.8 22.4 22.2 ...

但我希望它是一个 posixct 变量,所以我应用了 as.POSIXct 函数:

df$date_time<-as.POSIXct(df$date_time)


 df
             date_time   temp
1  0006-05-22 10:22:01 21.296
2  0006-05-22 10:23:01 22.047
3  0006-05-22 10:24:01 22.798
4  0006-05-22 10:25:01 22.422
5  0006-05-22 10:26:01 22.172
6  0006-05-22 10:27:01 22.673
7  0006-05-22 10:28:01 22.360
8  0006-05-22 10:29:01 22.110
9  0006-05-22 10:30:01 21.922
10 0006-05-22 10:31:01 21.797
11 0006-05-22 10:32:01 21.672
12 0006-05-22 10:33:01 21.609

但是,它将天数视为年数,反之亦然。 通过指定格式,不起作用:

df$date_time<-as.POSIXct(df$date_time,format="%dd-%mm-%YYYY %H:%M:%S")
df

             date_time   temp
1  0006-05-22 10:22:01 21.296
2  0006-05-22 10:23:01 22.047
3  0006-05-22 10:24:01 22.798
4  0006-05-22 10:25:01 22.422
5  0006-05-22 10:26:01 22.172
6  0006-05-22 10:27:01 22.673
7  0006-05-22 10:28:01 22.360
8  0006-05-22 10:29:01 22.110
9  0006-05-22 10:30:01 21.922
10 0006-05-22 10:31:01 21.797
11 0006-05-22 10:32:01 21.672
12 0006-05-22 10:33:01 21.609

我该如何解决这个问题?任何建议都会有帮助

提前致谢!

r format posixct
1个回答
0
投票

两种选择:

1- 使用

as.POSIXct()
时,您没有使用正确的格式

as.POSIXct(df$date_time, format = "%d/%m/%y %H:%M:%S")

2- 使用 lubridate 包,它有许多有用的功能来处理日期时间对象

ubridate::dmy_hms(df$date_time)

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