R语言-时间刻度的转换

一、问题

有个问题困扰了我很久。
我有下面数据,第一列是小时+分钟,第二列是数值:
0000      112
0001      123
0002      122
...
0059      123
0100      120
...
2359      156

请问怎么把这个绘制成分钟颗粒度的时间序列图?直接使用ggplot函数画出来的横轴会是数字,而不是时间。

二、解答

这个问题的本质实际上是要统一时间刻度,可以先把时间转换为小时单位或分钟单位,然后再作为坐标刻度。

1、假设有矩阵y:

> y
     x      x2                   
[1,] "0000" "0.861078206472926"  
[2,] "0001" "-0.0993158925503671"
[3,] "0011" "-0.227230172016484"
[4,] "1201" "0.0763049905510434"
[5,] "1203" "-1.64848265734858"  
[6,] "1409" "0.771992874036383"  
[7,] "1508" "0.111608655100976"  
[8,] "1520" "-1.09952899544323"  


x为小时+分钟字符串变量,x2为值。

2、进行时间转换

(1)转换为单位为分钟的时刻
> x1b<-round(as.numeric(substr(y[,1],1,2)) + as.numeric(substr(y[1,],3,4)) / 60,digits=2)
> plot(x1b,x2)

x1b为转换后的时间,x2为矩阵中的数值。

(2)转换为单位为小时的时刻
> x1c<-as.numeric(substr(y[,1],1,2))*60 + as.numeric(substr(y[1,],3,4))
> plot(x1c,x2)

x1c为转换后的时间,x2为矩阵中的数值。

通过绘图对比,两者的趋势和变化规律是完全一致的,只是时间轴的单位不同。
注意:如果观测值超过一天,则还要对天进行折算。

3、效果图

(1)小时为单位


(2)分钟为单位


三、保留时间格式的转换

现假设有100个数据,是每分钟观察1次得到的,现模拟如下:

#生成100个数据,用于生成模拟记录时间
n<-c(1:100)

#模拟字符串时间数据
x<-paste(k %/% 60,k %% 60,sep=":")

#100个随机数
y<-rnorm(100)

生成的数据样子为:

> x
  [1] "0:1"  "0:2"  "0:3"  "0:4"  "0:5"  "0:6"  "0:7"  "0:8"  "0:9"  "0:10"
 [11] "0:11" "0:12" "0:13" "0:14" "0:15" "0:16" "0:17" "0:18" "0:19" "0:20"
 [21] "0:21" "0:22" "0:23" "0:24" "0:25" "0:26" "0:27" "0:28" "0:29" "0:30"
 [31] "0:31" "0:32" "0:33" "0:34" "0:35" "0:36" "0:37" "0:38" "0:39" "0:40"
 [41] "0:41" "0:42" "0:43" "0:44" "0:45" "0:46" "0:47" "0:48" "0:49" "0:50"
 [51] "0:51" "0:52" "0:53" "0:54" "0:55" "0:56" "0:57" "0:58" "0:59" "1:0"
 [61] "1:1"  "1:2"  "1:3"  "1:4"  "1:5"  "1:6"  "1:7"  "1:8"  "1:9"  "1:10"
 [71] "1:11" "1:12" "1:13" "1:14" "1:15" "1:16" "1:17" "1:18" "1:19" "1:20"
 [81] "1:21" "1:22" "1:23" "1:24" "1:25" "1:26" "1:27" "1:28" "1:29" "1:30"
 [91] "1:31" "1:32" "1:33" "1:34" "1:35" "1:36" "1:37" "1:38" "1:39" "1:40"
> y
  [1]  0.87712868 -0.40134861  1.08323341 -0.93902721 -0.92840951 -1.40612156
  [7] -3.10339460  0.15131072  0.48380452  0.89202039 -0.65595000 -1.59291257
 [13] -0.92847687 -0.14931817  0.05102305 -2.92666369  1.13730537 -0.88515305
 [19]  0.43151127 -0.69812564  0.22229680 -1.97363693 -1.40353484  0.94304827
 [25] -0.45756544  0.68164255 -1.00422724 -0.80533052  0.59128945 -1.18172352
 [31]  0.07428473 -0.03469865 -0.51392341  0.79084055 -1.14850486 -0.54046263
 [37] -0.02900111  0.46538361 -0.79899558 -1.27138898  0.26639805  0.41695152
 [43]  1.36159350 -0.23907673 -0.32639352 -1.49703421 -0.33806093 -0.56222054
 [49]  0.04647622 -0.98232488  1.28961535  1.31219521 -0.20893550 -1.24307742
 [55]  0.51683866  0.22621030  0.13882866 -0.03457370 -0.68909796 -1.14311280
 [61] -1.81996267  0.69068287 -1.16380184 -0.76842632 -0.26537744 -0.94346247
 [67] -0.48761086  0.53369090  0.49644045 -0.30901995  0.65937527 -0.18226427
 [73]  1.01346741 -1.03014423  0.67036752  0.42735678  1.66863515  0.65309760
 [79] -1.40057442  1.05346154  0.54984033  1.71869455  0.51632433  0.15091974
 [85] -0.22607175 -0.28952495 -0.82730526  0.03708794 -0.29521562  0.28084754
 [91]  0.24559514  0.23991062  0.22592170  1.16994149 -0.35928250  0.83258745
 [97] -0.40319095  1.52669402  0.83994487  1.60509721

现在对上述模拟数据进行处理:

(1)先将字符串时间转换为时间格式

xx<-strptime(x,"%H:%M")

(2)然后再画图,使用ggplot2库绘制:

qplot(xx,y,xlab="时间",ylab="错误率",main="错误率变化图")

(3)效果图为:


  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值