nic*_*ico 75 time r date posixct
如何从丢弃日期部分的一系列POSIXct对象中提取时间?
例如,我有:
times <- structure(c(1331086009.50098, 1331091427.42461, 1331252565.99979,
1331252675.81601, 1331262597.72474, 1331262641.11786, 1331269557.4059,
1331278779.26727, 1331448476.96126, 1331452596.13806), class = c("POSIXct",
"POSIXt"))
Run Code Online (Sandbox Code Playgroud)
对应于这些日期:
"2012-03-07 03:06:49 CET" "2012-03-07 04:37:07 CET"
"2012-03-09 01:22:45 CET" "2012-03-09 01:24:35 CET"
"2012-03-09 04:09:57 CET" "2012-03-09 04:10:41 CET"
"2012-03-09 06:05:57 CET" "2012-03-09 08:39:39 CET"
"2012-03-11 07:47:56 CET" "2012-03-11 08:56:36 CET"
Run Code Online (Sandbox Code Playgroud)
现在,我有一些在这些时间测量的参数值
val <- c(1.25343125e-05, 0.00022890575,
3.9269125e-05, 0.0002285681875,
4.26353125e-05, 5.982625e-05,
2.09575e-05, 0.0001516951251,
2.653125e-05, 0.0001021391875)
Run Code Online (Sandbox Code Playgroud)
我想绘制val与当天的时间,而不考虑测量val的具体日期.
是否有一个特定的功能可以让我这样做?
And*_*rie 100
您可以使用strftime将日期时间转换为任何字符格式:
> t <- strftime(times, format="%H:%M:%S")
> t
[1] "02:06:49" "03:37:07" "00:22:45" "00:24:35" "03:09:57" "03:10:41"
[7] "05:05:57" "07:39:39" "06:47:56" "07:56:36"
Run Code Online (Sandbox Code Playgroud)
但这并没有多大帮助,因为你想绘制你的数据.一种解决方法是从您的时间中删除日期元素,然后在所有时间添加相同的日期:
> xx <- as.POSIXct(t, format="%H:%M:%S")
> xx
[1] "2012-03-23 02:06:49 GMT" "2012-03-23 03:37:07 GMT"
[3] "2012-03-23 00:22:45 GMT" "2012-03-23 00:24:35 GMT"
[5] "2012-03-23 03:09:57 GMT" "2012-03-23 03:10:41 GMT"
[7] "2012-03-23 05:05:57 GMT" "2012-03-23 07:39:39 GMT"
[9] "2012-03-23 06:47:56 GMT" "2012-03-23 07:56:36 GMT"
Run Code Online (Sandbox Code Playgroud)
现在您可以datetime在绘图中使用这些对象:
plot(xx, rnorm(length(xx)), xlab="Time", ylab="Random value")
Run Code Online (Sandbox Code Playgroud)

如需更多帮助,请参阅 ?DateTimeClasses
Dir*_*tel 14
以前的答案显示了这个伎俩.在本质上:
您必须保留POSIXct类型才能利用所有现有的绘图功能
如果你想在一个地块上"叠加"好几天,突出每日内变化,最好的伎俩也是......
施加同一天(如果需要,可以是月份甚至是年份,这不是这种情况)
您可以通过在POSIXlt表示中覆盖日期和月份组件来执行此操作,或者仅通过在不同日期之间相对于0:00:00偏移"delta"来执行此操作.
因此,您times和我们val提供的帮助:
## impose month and day based on first obs
ntimes <- as.POSIXlt(times) # convert to 'POSIX list type'
ntimes$mday <- ntimes[1]$mday # and $mon if it differs too
ntimes <- as.POSIXct(ntimes) # convert back
par(mfrow=c(2,1))
plot(times,val) # old times
plot(ntimes,val) # new times
Run Code Online (Sandbox Code Playgroud)
产生这与原始和修改的时间尺度形成鲜明对比:

对于那些寻找 tidyverse 方法从 POSIXct 对象中提取 hh:mm::ss.sssss 的人来说,这是一个更新。请注意,时区不包含在输出中。
library(hms)
as_hms(times)
Run Code Online (Sandbox Code Playgroud)
小智 8
该data.table软件包有一个功能' as.ITime',可以在下面有效地使用:
library(data.table)
x <- "2012-03-07 03:06:49 CET"
as.IDate(x) # Output is "2012-03-07"
as.ITime(x) # Output is "03:06:49"
Run Code Online (Sandbox Code Playgroud)
小智 5
已经提供了很多解决方案,但我还没有看到这个,它使用包 chron:
hours = times(strftime(times, format="%T"))
plot(val~hours)
Run Code Online (Sandbox Code Playgroud)
(抱歉,我无权发布图片,您必须自己绘制)
| 归档时间: |
|
| 查看次数: |
84585 次 |
| 最近记录: |