Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何对列中的每个名称值进行时间序列分析,分解并导出到表中_R_Dataframe_Time Series_Xts_Decomposition - Fatal编程技术网

R 如何对列中的每个名称值进行时间序列分析,分解并导出到表中

R 如何对列中的每个名称值进行时间序列分析,分解并导出到表中,r,dataframe,time-series,xts,decomposition,R,Dataframe,Time Series,Xts,Decomposition,我有一个数据框(DF),有几个列,但目标列是日期、索引和站点。 下面是一个子集表: 时间序列开始于2006年朱利安日1,结束于2015年jd 353,全年观测23次 INDEX_TS <- ts(DF$index, start = c(2006,1), end = c(2015,23), frequency = 23) 要提取表中的季节性、趋势和余数: STL12 <- stl(INDEX_TS, 12) DF_STL <- data.frame(STL12, INDEX_T

我有一个数据框(DF),有几个列,但目标列是日期、索引和站点。 下面是一个子集表:

时间序列开始于2006年朱利安日1,结束于2015年jd 353,全年观测23次

INDEX_TS <- ts(DF$index, start = c(2006,1), end = c(2015,23), frequency = 23)
要提取表中的
季节性
趋势
余数

STL12 <- stl(INDEX_TS, 12)
DF_STL <- data.frame(STL12, INDEX_TS$time.series)

尝试以下方法。此
站点
拆分数据帧,将
索引
存储在每个
站点
中,作为
ts
分解
并与原始子集组合。最后,
do.call
rbind
s所有子集+解组到最终数据帧中:

可复制示例:

AirData = data.frame(AirPassengers, SITE = rep(c("A", "B", "C"), each = 48))

do.call(rbind, lapply(split(AirData, AirData$SITE), function(x) {
  INDEX_TS <- ts(x$AirPassengers, frequency = 12)
  STL12 <- stl(INDEX_TS, 12)$time.series
  return(data.frame(x, STL12))
}))
     AirPassengers SITE   seasonal    trend  remainder
A.1            112    A -13.986104 123.5683  2.4177707
A.2            118    A  -7.759212 124.1061  1.6531607
A.3            132    A   8.325181 124.6438 -0.9689496
A.4            129    A  -1.887274 125.1815  5.7057890
A.5            121    A  -5.517268 125.7871  0.7302135
A.6            135    A  12.098461 126.3926 -3.4910836
A.7            148    A  27.559203 126.9982 -6.5573953
A.8            148    A  28.502489 127.5898 -8.0922545
A.9            136    A   9.726413 128.1813 -1.9077517
A.10           119    A -12.472175 128.7729  2.6992637
A.11           104    A -31.553871 129.7343  5.8195429
A.12           118    A -13.061798 130.6957  0.3660530
A.13           115    A -13.978583 131.6572 -2.6785793
A.14           126    A  -7.772715 133.1337  0.6389980
A.15           141    A   8.281701 134.6103 -1.8919729
A.16           135    A  -2.206362 136.0868  1.1195345
A.17           125    A  -5.580592 137.8077 -7.2271040
A.18           149    A  12.368207 139.5286 -2.8967712
A.19           170    A  27.747586 141.2494  1.0029824
A.20           170    A  28.926157 143.7331 -2.6593066
...            ...  ...        ...      ...        ...
do.call(rbind, lapply(split(DF, DF$SITE), function(x) {
  INDEX_TS <- ts(x$index, start = c(2006,1), end = c(2015,23), frequency = 23)
  STL12 <- stl(INDEX_TS, 12)$time.series
  return(data.frame(x, STL12))
}))
OP的示例:

AirData = data.frame(AirPassengers, SITE = rep(c("A", "B", "C"), each = 48))

do.call(rbind, lapply(split(AirData, AirData$SITE), function(x) {
  INDEX_TS <- ts(x$AirPassengers, frequency = 12)
  STL12 <- stl(INDEX_TS, 12)$time.series
  return(data.frame(x, STL12))
}))
     AirPassengers SITE   seasonal    trend  remainder
A.1            112    A -13.986104 123.5683  2.4177707
A.2            118    A  -7.759212 124.1061  1.6531607
A.3            132    A   8.325181 124.6438 -0.9689496
A.4            129    A  -1.887274 125.1815  5.7057890
A.5            121    A  -5.517268 125.7871  0.7302135
A.6            135    A  12.098461 126.3926 -3.4910836
A.7            148    A  27.559203 126.9982 -6.5573953
A.8            148    A  28.502489 127.5898 -8.0922545
A.9            136    A   9.726413 128.1813 -1.9077517
A.10           119    A -12.472175 128.7729  2.6992637
A.11           104    A -31.553871 129.7343  5.8195429
A.12           118    A -13.061798 130.6957  0.3660530
A.13           115    A -13.978583 131.6572 -2.6785793
A.14           126    A  -7.772715 133.1337  0.6389980
A.15           141    A   8.281701 134.6103 -1.8919729
A.16           135    A  -2.206362 136.0868  1.1195345
A.17           125    A  -5.580592 137.8077 -7.2271040
A.18           149    A  12.368207 139.5286 -2.8967712
A.19           170    A  27.747586 141.2494  1.0029824
A.20           170    A  28.926157 143.7331 -2.6593066
...            ...  ...        ...      ...        ...
do.call(rbind, lapply(split(DF, DF$SITE), function(x) {
  INDEX_TS <- ts(x$index, start = c(2006,1), end = c(2015,23), frequency = 23)
  STL12 <- stl(INDEX_TS, 12)$time.series
  return(data.frame(x, STL12))
}))
do.call(rbind,lappy(split)(DF,DF$SITE),函数(x){

INDEX_TS@useR原谅我redaction@useR我想分别分解每个站点,因为每个站点都有不同的行为,所以每个站点在同一日期将有不同的分解值。
ts中的错误(x$LAI,start=c(2006,1),end=c(2017,17),frequency=23):“ts”对象必须有一个或多个观察值
我认为它可能有用,但请发送给我error@OSCAR_P您确定每个
站点
都有相同数量的观察结果吗?您运行的此代码与我的解决方案中的代码不同。另外,请通过复制和粘贴
dput(DF)的输出提供一个可复制的示例
进入您的问题。我纠正了这一点。实际上,该示例运行得很好,但看起来,主要区别在于AirData表,其中AirPassenger是时间序列。现在,我在stl(索引,12)中获得了
错误:外部函数调用(arg 1)中的NA/NaN/Inf从:stl(索引,12)