使用相同的 lubridate 函数时,我得到两个不同的输出,我不知道为什么

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

我是 R 新手,刚刚开始使用

library(lubridate)
包。我想将数据帧格式
sleep
intensity
转换为相同的格式,并将它们从 char 转换为 Date 格式。

原始数据框,

> head(sleep):

          Id              SleepDay TotalSleepRecords TotalMinutesAsleep TotalTimeInBed
1 1503960366 4/12/2016 12:00:00 AM                 1                327            346
2 1503960366 4/13/2016 12:00:00 AM                 2                384            407
3 1503960366 4/15/2016 12:00:00 AM                 1                412            442
4 1503960366 4/16/2016 12:00:00 AM                 2                340            367
5 1503960366 4/17/2016 12:00:00 AM                 1                700            712
6 1503960366 4/19/2016 12:00:00 AM                 1                304            320

> head(intensity)

          Id          ActivityHour TotalIntensity AverageIntensity
1 1503960366 4/12/2016 12:00:00 AM             20         0.333333
2 1503960366  4/12/2016 1:00:00 AM              8         0.133333
3 1503960366  4/12/2016 2:00:00 AM              7         0.116667
4 1503960366  4/12/2016 3:00:00 AM              0         0.000000
5 1503960366  4/12/2016 4:00:00 AM              0         0.000000
6 1503960366  4/12/2016 5:00:00 AM              0         0.000000

我运行了润滑功能:

sleep$SleepDay=as.POSIXct(sleep$SleepDay, format="%m/%d/%Y %I:%M:%S %p", tz=Sys.timezone())
intensity$ActivityHour=as.POSIXct(intensity$ActivityHour, format="%m/%d/%Y %I:%M:%S %p", tz=Sys.timezone())

输出:

> head(sleep)
          Id   SleepDay TotalSleepRecords TotalMinutesAsleep TotalTimeInBed     date
1 1503960366 2016-04-12                 1                327            346 04/12/16
2 1503960366 2016-04-13                 2                384            407 04/13/16
3 1503960366 2016-04-15                 1                412            442 04/15/16
4 1503960366 2016-04-16                 2                340            367 04/16/16
5 1503960366 2016-04-17                 1                700            712 04/17/16
6 1503960366 2016-04-19                 1                304            320 04/19/16

> head(intensity)
          Id        ActivityHour TotalIntensity AverageIntensity
1 1503960366 2016-04-12 00:00:00             20         0.333333
2 1503960366 2016-04-12 01:00:00              8         0.133333
3 1503960366 2016-04-12 02:00:00              7         0.116667
4 1503960366 2016-04-12 03:00:00              0         0.000000
5 1503960366 2016-04-12 04:00:00              0         0.000000
6 1503960366 2016-04-12 05:00:00              0         0.000000

为什么为强度数据帧指定了时间,而不为 SleepDay 指定了时间?是不是把它去掉了?代码看起来相同...

此外,在代码中,格式被指定为

"%m/%d/%Y %I:%M:%S %p"
,但数据框显示它为倒置的
%Y/%m/%d
,为什么?我知道这些问题可能看起来很业余,但我想详细了解代码。

谢谢你。

我尝试转换日期格式,它有效,但我想了解这个过程。

r date lubridate
1个回答
0
投票

R 只是很狡猾:如果向量/列中的所有时间戳实际上都是“午夜”,那么 R 会隐藏“渲染到屏幕”的时间分量。底层对象仍然完全相同,它是完整的时间戳。 演示:

tm <- as.POSIXct("4/12/2016 12:00:00 AM", format="%m/%d/%Y %I:%M:%S %p") tm + rep(0, 4) # [1] "2016-04-12 EDT" "2016-04-12 EDT" "2016-04-12 EDT" "2016-04-12 EDT" tm + 0:3 # [1] "2016-04-12 00:00:00 EDT" "2016-04-12 00:00:01 EDT" "2016-04-12 00:00:02 EDT" "2016-04-12 00:00:03 EDT"

在下面,它们都只是带有属性的数字:

dput(tm + 0:4) # structure(c(1460433600, 1460433601, 1460433602, 1460433603, 1460433604 # ), class = c("POSIXct", "POSIXt"))

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