我正在分析来自82个主题的emg信号数据集,每一列都是一个主题,行是emg值,我遵循了另一个问题的第二个答案解决方案:How can I apply a piece of R code to every column of my data frame并运行ok,下面是一个示例:
library(biosignalEMG)
data(emg96627009)
colnames(emg96627009) <- c("subject1", "subject2", "subject3", "subject4")
for(i in names(emg96627009)){
x <- as.emg(emg96627009[i], samplingrate = 1000, units = "mV")
x <- rectification(x)
x <- lowpass(x, cutoff = 200)
x <- movingaverage(x, wsize = 100, units = "samples")
plot(x)
}
我希望返回一个数据帧,其中包含来自每个主题的处理后的emg信号,类似于原始文件的结构(列、主题和行emg值),因为我想分析它们;我如何做;我尝试添加到循环中。
...
return(x)
}
或
...
return(x$values)
}
但是它们不起作用,只从subject1对象返回x$值
另一个问题是,我有一个数据框架列表,数据来自具有上述结构的多块肌肉,我如何调整这个循环来处理数据帧列表?
发布于 2022-06-16 16:11:22
要回答您的第一个问题:您可以编写一个函数,并将其应用于数据的每一列,然后将结果合并成一个数据,如下所示
emg96627009_processed <- lapply(colnames(emg96627009), function(subject) {
x <- as.emg(emg96627009[subject], samplingrate = 1000, units = "mV")
x <- rectification(x)
x <- lowpass(x, cutoff = 200)
x <- movingaverage(x, wsize = 100, units = "samples")
x$values
})
emg96627009_processed <- as.data.frame(do.call(cbind, emg96627009_processed))
colnames(emg96627009_processed) <- colnames(emg96627009)
如果您有多个数据文件,那么最好事先将它们组合起来,然后重复这个过程。
https://stackoverflow.com/questions/72645632
复制相似问题