Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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_Time Series - Fatal编程技术网

R 垂直叠加时间序列数据

R 垂直叠加时间序列数据,r,time-series,R,Time Series,我正在努力处理时间序列数据。数据集的第一列包含有关数据收集时间点的信息,第二列包含来自不同研究的数据。我有几百项研究。作为一个例子,我包含了5项研究的样本数据。我想用每个研究的时间和数据点垂直堆叠数据集。示例数据集类似于下面提供的数据: TIME Study1 Study2 Study3 Study4 Study5 0.00 52.12 53.66 52.03 50.36 51.34 90.00 49.49 51.71 49.49 48.48

我正在努力处理时间序列数据。数据集的第一列包含有关数据收集时间点的信息,第二列包含来自不同研究的数据。我有几百项研究。作为一个例子,我包含了5项研究的样本数据。我想用每个研究的时间和数据点垂直堆叠数据集。示例数据集类似于下面提供的数据:

TIME    Study1  Study2  Study3  Study4  Study5
0.00    52.12   53.66   52.03   50.36   51.34
90.00   49.49   51.71   49.49   48.48   50.19
180.00  47.00   49.83   47.07   46.67   49.05
270.00  44.63   48.02   44.77   44.93   47.95
360.00  42.38   46.28   42.59   43.25   46.87
450.00  40.24   44.60   40.50   41.64   45.81
540.00  38.21   42.98   38.53   40.08   44.78
我正在寻找以下形式的输出:

TIME    Study   ID
0   52.12   1
90  49.49   1
180 47  1
270 44.63   1
360 42.38   1
450 40.24   1
540 38.21   1
0   53.66   2
90  51.71   2
180 49.83   2
270 48.02   2
360 46.28   2
450 44.6    2
540 42.98   2
0   52.03   3
90  49.49   3
180 47.07   3
270 44.77   3
...

下面是一种使用
cbind
stack
的方法:

 longdf <- cbind(df$TIME, stack(df[,-1], ))
 names(longdf) <- c("TIME", "Study", "id")
如果您想像示例中那样将id更改为整数,请使用

longdf$id <- as.integer(longdf$id)

longdf$id这是一个经典的“从宽到长”数据集操作。下面,我展示了对您的数据使用
base
功能:

d.l <- reshape(d, varying=list(c("Study1","Study2","Study3","Study4","Study5")),
               v.names="Y", idvar="TIME", times=1:5, timevar="Study",
               direction="long")
d.l <- d.l[,c(2,1,3)]
rownames(d.l) <- NULL
d.l
#    Study TIME     Y
# 1      1    0 52.12
# 2      1   90 49.49
# 3      1  180 47.00
# 4      1  270 44.63
# 5      1  360 42.38
# 6      1  450 40.24
# 7      1  540 38.21
# 8      2    0 53.66
# 9      2   90 51.71
# 10     2  180 49.83
# 11     2  270 48.02
# 12     2  360 46.28
# 13     2  450 44.60
# 14     2  540 42.98
# 15     3    0 52.03
# 16     3   90 49.49
# 17     3  180 47.07
# ...

d.l使用
gather
from
tidyr
df%>%gather(ID,学习,-时间)
感谢您的回复和宝贵时间!
d.l <- reshape(d, varying=list(c("Study1","Study2","Study3","Study4","Study5")),
               v.names="Y", idvar="TIME", times=1:5, timevar="Study",
               direction="long")
d.l <- d.l[,c(2,1,3)]
rownames(d.l) <- NULL
d.l
#    Study TIME     Y
# 1      1    0 52.12
# 2      1   90 49.49
# 3      1  180 47.00
# 4      1  270 44.63
# 5      1  360 42.38
# 6      1  450 40.24
# 7      1  540 38.21
# 8      2    0 53.66
# 9      2   90 51.71
# 10     2  180 49.83
# 11     2  270 48.02
# 12     2  360 46.28
# 13     2  450 44.60
# 14     2  540 42.98
# 15     3    0 52.03
# 16     3   90 49.49
# 17     3  180 47.07
# ...