我正在处理45个大型数据帧,每个数据帧有60个非常混乱的时间序列数据。但它基本上可以归结为下面的两个数据帧。我已经设法将其分类为这两种数据帧类型,第一种是y轴上的位置
Group1 Group2 Group3
0 0 0
1 1 1
3 2 4
5 3 7
5 8
9
names samples t0 XIncrement
Group1 4 0 2
Group2 5 1 2
Group3 7 2 3
我必须为每个组创建时间。当我为单个组写函数时,效果很好,我得到了我想要的。10点是开始时间xincrement是每次采样之间的时间间隔3.) sample为集合中样本的个数。4)。时间为每次采样的时间
Time_function <- function(samples, t0, XIncrement) {
samples_2 <-c(1:samples)
Time <- ((samples_2* t0) +XIncrement)
return(Time)
#}
}
test_function <- Time_function(100, 200e-9, 500e-12)
我需要它是"应用"每组。我真的不知道如何用信息创建一个新的数据帧或将其添加到df的行。我已经尝试制作一个空数据帧并以这种方式填充它,但没有工作。
当我转置数据并将其转换为列表形式时,它似乎是最可用的形式,但我仍然无法将create Time转换为列表
添加为了更清晰:每个组都有自己的独特时间,一些组的采样次数比其他组多。
所以,最后我需要合并Group_1和Group1_Time, Group_2和Group2_Time。数据帧将被打乱。
感谢您提供的任何帮助或指导。我用谷歌和搜索stackoverflow来获取信息,但我一无所获。如果有这样的问题,太好了,我还没找到呢。
假设输入数据在下面的注释中可重复显示,此代码将列表L
和数据帧DF
结合起来,并为输出假设更合适的数据结构ts
类:
make_ts <- function(g, t0, xincr) ts(g, start = t0, deltat = xincr)
tt <- Map(make_ts, L, DF$t0, DF$XIncrement)
tt
给出ts
对象列表:
$Group1
Time Series:
Start = 0
End = 6
Frequency = 0.5
[1] 0 1 3 5
$Group2
Time Series:
Start = 1
End = 9
Frequency = 0.5
[1] 0 1 2 3 5
$Group3
Time Series:
Start = 2
End = 17
Frequency = 0.333333333333333
[1] 0 1 4 7 8 9
请注意,我们可以恢复数据,时间,开始时间,delta和频率(= 1/delta),并转换为如下的数据帧列表:
lapply(tt, c)
lapply(tt, time)
sapply(tt, start)
sapply(tt, deltat)
sapply(tt, frequency)
library(zoo)
lapply(tt, fortify.zoo)
注意
由于不可能有不同列长度的数据帧,我们假设第一个数据结构是如图所示的列表,第二个数据结构是数据帧。
L <- list(Group1 = c(0, 1, 3, 5), Group2 = c(0, 1, 2, 3, 5),
Group3 = c(0, 1, 4, 7, 8, 9))
DF <- structure(list(names = c("Group1", "Group2", "Group3"), samples = c(4L,
5L, 7L), t0 = 0:2, XIncrement = c(2L, 2L, 3L)), class = "data.frame", row.names = c(NA,
-3L))