【发布时间】:2017-09-28 10:29:39
【问题描述】:
我有一个由多个样品运行(样品 a、b、c、d)的吸收光谱组成的数据框,其中 Ydata 是波长,Xdata 是吸收。我通过从感兴趣的峰减去安静波长范围内的平均吸收来计算基线校正吸收。
简化的数据框:
DF <- data.frame(
group = rep(c("a", "b", "c", "d"),each=10),
Ydata = rep(1:10, times = 4),
Xdata = c(seq(1,10,1),seq(5,50,5),seq(20,11,-1),seq(0.3,3,0.3)),
abscorr = NA
)
我需要通过减去运行中子集波长范围的平均值来校正每个样本运行。我一直这样做:
for (i in 1:length(levels(DF$group))){
sub1 <- subset(DF, group == levels(DF$group)[i], select = c(group, Ydata,
Xdata));
sub2 <- subset(sub1, Ydata > 4 & Ydata < 8, select = c(group, Ydata,
Xdata));
sub1$abscorr <- sub1$Xdata - mean(sub2$Xdata);
DF <- rbind(sub1, DF);
}
然后整理所有的 'NA's
DF <- na.omit(DF)
使用循环显然很笨拙。对于大型数据集,是否有更好的方法来完成这项任务?也许dplyr?
【问题讨论】: