楼主: zwj1012
16336 15

[有偿编程] 用R创建一个新的变量:计算相邻时间间隔差 [推广有奖]

  • 0关注
  • 0粉丝

本科生

45%

还不是VIP/贵宾

-

威望
0
论坛币
330 个
通用积分
1.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
907 点
帖子
52
精华
0
在线时间
103 小时
注册时间
2008-11-9
最后登录
2021-9-8

楼主
zwj1012 发表于 2014-7-15 22:35:52 |AI写论文
10论坛币
用R创建一个新的变量,该变量是由已有的时间序列变量计算得来的:每个观测值是相邻时间的时间间隔,计算方法为,后一个时间减去前一个时间。
各位高手,帮帮忙,这个条件怎么写啊。
十分感谢。
关键词:时间间隔 计算方法 时间序列 观测值 计算方法

沙发
yywan0913 在职认证  发表于 2014-7-15 22:35:53
  1. options(stringsAsFactors=F)
  2. t=read.table("Q617-2013-08.xlsx",header=T)
  3. head(t)
  4.    OC     date    time
  5. 1  92 2013/8/1 8:48:03
  6. 2  92 2013/8/1 8:48:06
  7. 3  92 2013/8/1 8:53:11
  8. 4  92 2013/8/1 8:53:15
  9. 5  92 2013/8/1 8:53:20
  10. 6  92 2013/8/1 8:53:22
  11. z=paste(t[,2],t[,3])
  12. time=strptime(z, "%Y/%m/%d %H:%M:%S")
  13. head(time)
  14. [1] "2013-08-01 08:48:03" "2013-08-01 08:48:06" "2013-08-01 08:53:11"
  15. [4] "2013-08-01 08:53:15" "2013-08-01 08:53:20" "2013-08-01 08:53:22"
  16. diff(time)
  17. Time differences in secs
  18. [1]   3 305   4   5   2   4   4   3   4   4   4 979   4   4   4   4   4   4   4
  19. [20]   4   4   4   4
  20. attr(,"tzone")
  21. [1] ""

  22. as.vector(diff(time))   #相邻间时间差
复制代码
已有 1 人评分经验 论坛币 收起 理由
李会超 + 80 + 20 精彩帖子

总评分: 经验 + 80  论坛币 + 20   查看全部评分

藤椅
zwj1012 发表于 2014-7-21 15:01:03
谢谢高手

板凳
zwj1012 发表于 2014-7-21 15:23:19
yywan0913 发表于 2014-7-15 22:35
attr(,"tzone")

[1] ""

这两行是新增一列变量么,我怎么一直报错?
还想请教:如果相邻时间间隔大于1800秒,我定义为两段,然后这些时间间隔就被分为几段:
比如:
4    1   10    2    3    2    3    1    2    6    0    1    2    2    2    3    2    3    1    2 4230  2    2    2    2    2    3    2    2    2   2120  3   2  。。。。。
这组数据就是两段
我的目的是想:计算每段的时间之和:4230之前的所有时间间隔之和、4230与2120之间的时间间隔之和。。。。

高手再指点下吧,多谢多谢多谢

报纸
yywan0913 在职认证  发表于 2014-7-22 09:15:38
  1. as.vector(diff(time))    #之前最后一句错误,已改
  2.   [1]   3 305   4   5   2   4   4   3   4   4   4 979   4   4   4   4   4   4
  3. [19]   4   4   4   4   4   4   4   4   4   3   4   4   4   4   4   4   4   4
  4. [37]   4   4   4   4   4   4   4   4   3   4   4   4   4   4   4   4   4   4
  5. [55]   4   4   4   4   4   4   4   4   4   4   4   3   4   4   4   4   4   4
  6. [73]   4   4   4   4   4   4   4   4   4   4   4   4   3   5   3   4   4   4
  7. [91]   4   4   4   5   4  28   4  25   4   4   4   4   4   4   4   4   4   3
  8. [109]   4   4   4   4   4   4   4   4   4    ...
  9. uu=as.vector(diff(time))    #取了一部分结果
  10. p=which(uu>20);p      #以20为例    可改1800    p为大于20所在位置
  11. [1]  2 12 96 98
  12. p=c(0,which(uu>20),length(uu)+1)      #扩展p的边界位置
  13. q=c();for(i in 1:(length(p)-1))  q=c(q,sum(uu[(p[i]+1):(p[i+1]-1)]))    #想不出好的方法,循环咯
  14. q
复制代码

地板
zwj1012 发表于 2014-7-22 09:32:53
yywan0913 发表于 2014-7-22 09:15
十分感谢!我做做看

7
zwj1012 发表于 2014-7-22 15:01:52
yywan0913 发表于 2014-7-22 09:15
高手,你上面两部分代码真心有用,太感谢了!
我还有个小小的问题,如果我想要循环计算OC那列每段之和,怎么写啊
每段还是按照之前的1800分隔开。。。

拜托拜托你了,谢谢。

PS:这个做完,我这份数据清洗就全部完工了。

8
yywan0913 在职认证  发表于 2014-7-22 15:49:49
  1. q0=c();for(i in 1:(length(p)-1))  q0=c(q0,sum(t[,1][(p[i]+1):(p[i+1]-1)]))   
复制代码


uu换成t[,1]   #OC 列  即可

9
zwj1012 发表于 2014-7-22 16:41:33
yywan0913 发表于 2014-7-22 15:49
uu换成t[,1]   #OC 列  即可
十分感谢

10
zwj1012 发表于 2014-7-28 15:51:42
yywan0913 发表于 2014-7-22 15:49
uu换成t[,1]   #OC 列  即可
老师,我想计算#OC列:每段(之前以1800秒分割)首尾OC数值之差,怎么写呢?
我试着写了,总是错误,运行不出来,请教您。谢谢。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 02:45