我可以在 r 中的多个数据帧列表中应用滑动 windows 吗?

Can i apply sliding windows in a list of multible dataframes in r?

我有大约 400 个数据帧的列表,我想为每个数据帧提取特征。所有数据帧的特征都相同。

数据帧由来自加速度计的信号组成,我将应用分类来识别不同的活动。由于我的 类 基于特定模式,我需要我的特征(统计和频域特征)基于窗口化。

我可以直接进入数据帧列表吗?提取特征,然后将新的特征列添加回每个数据框的列表?

如有任何建议,我们将不胜感激。我卡住了。我知道如何在每个数据帧上执行此操作,但是处理那么多的数据帧非常耗时。

列表示例

# Dataframes, x and y are accelerometer measurements and a is annotation 
df1 <- data.frame(x = runif(10), y = runif(10), a = sample(c(1,2), 10, replace = TRUE)
df2 <- data.frame(x = runif(10), y = runif(10), a = sample(c(1,2), 10, replace = TRUE)
lst <- list(df1, df2)

计划是每个数据框都有很多特征,然后将所有数据框合并在一起进行特征选择和分类。

zoo::rollapply()lapply() 的组合应该可以解决问题。

set.seed(1)
df1 <- data.frame(x = runif(10), 
                  y = runif(10), 
                  a = sample(c(1,2), 10, replace = TRUE))
df2 <- data.frame(x = runif(10), 
                  y = runif(10), 
                  a = sample(c(1,2), 10, replace = TRUE))
lst <- list(df1, df2)

library(zoo)

lst_w <- lapply(lst, function(x) {
    cbind(x, a_w=rollapply(x$a, 3, mean, partial=TRUE))
    })

这将为每个数据框添加列 a 的(平均)窗口版本。

lapply(lst_w, head, 3)
# [[1]]
          # x         y a      a_w
# 1 0.2655087 0.2059746 2 1.500000
# 2 0.3721239 0.1765568 1 1.666667
# 3 0.5728534 0.6870228 2 1.333333

# [[2]]
          # x         y a      a_w
# 1 0.4820801 0.8209463 1 1.500000
# 2 0.5995658 0.6470602 2 1.333333
# 3 0.4935413 0.7829328 1 1.333333

您可以将 rollapply() 调用中的 mean 替换为您想要的任何函数。