如何在 R 中对参差不齐的数据框使用函数

How to use a function to a ragged dataframe in 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

我必须为每个小组创造时间。当我为单个组编写函数时效果很好,我得到了我想要的。 1.) t0 是开始时间 2.) 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 的行中。 我尝试制作一个空数据框并以这种方式填充它,但没有成功。

当我转置数据并将其放入列表形式时,这似乎是最有用的形式,但我仍然无法将创建时间放入列表中。

已添加 为更清楚起见:每个组都有自己独特的时间,有些组比其他组抽样更多。

因此,最后我需要将 Group_1 与 Group1_Time、Group_2 与 Group2_Time 合并。数据框将参差不齐。

感谢您提供的任何帮助或指导。我用谷歌搜索并搜索了 Whosebug 以获取信息,但我空手而归。如果有这样的问题,很好,我还没有找到。

假设输入数据在下面的注释中可重复显示,此代码结合了列表 L 和数据框 DF 并假设更合适的数据结构,ts class, 对于输出):

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

请注意,我们可以恢复数据、时间、开始时间、deltat 和频率 (= 1/deltat) 并转换为这样的数据帧列表:

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))