我有类似于此
的时间序列数据 val
2015-10-15 7.85
2015-10-16 8
2015-10-19 8.18
2015-10-20 5.39
2015-10-21 2.38
2015-10-22 1.98
2015-10-23 9.25
2015-10-26 14.29
2015-10-27 15.52
2015-10-28 15.93
2015-10-29 15.79
2015-10-30 13.83
如何找到 val 变量的adjecent行(例如8和7.85)的斜率,并将其打印在R或python的不同列中
EDITED
我知道斜率的公式
但问题是我们如何在时间序列数据中区分 x (即日期)值 (这里x是日期,y是val)
答案 0 :(得分:0)
如果斜率是指(value(y)-value(x))/(yx),那么您的斜率应至少有一个小于数据框的值,因此很难将其显示在同一个数据框中数据框。
在R中,这将是我的答案:
slope<-numeric(length = nrow(df))
for(i in 2:(nrow(df)){
slope[i-1]<-(df[i-1,"val"]-df[i,"val"])/(as.numeric(df[i-1,1]-df[i,1]))
}
slope[nrow(df)]<-NA
df$slope<-slope
在R中,日期是一类数据(如整数,数字或字符)。 例如,我可以定义日期向量:
x<-as.Date(c("2015-10-15","2015-10-16"))
print( x )
[1] "2015-10-15" "2015-10-16"
2个日期的差异返回:
x[2]-x[1]
Time difference of 1 days
如你所述,你不能除以日期:
2/(x[2]-x[1])
Error in `/.difftime`(2, (x[2] - x[1])) :
second argument cannot be "difftime"
这就是为什么我使用as.numeric,它强制向量为数值(以天为单位):
2/as.numeric(x[2]-x[1])
[1] 2
证明它有效:
as.numeric(as.Date("2016-10-15")-as.Date("2015-10-16"))
[1] 365
(2016年是一个双年份,这是正确的!)