我是 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 只是很狡猾:如果向量/列中的所有时间戳实际上都是“午夜”,那么 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"))