我可以在 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 替换为您想要的任何函数。
我有大约 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 替换为您想要的任何函数。