如何对r中的不规则数据框使用函数



我正在处理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))

相关内容

  • 没有找到相关文章

最新更新