测试后插入 NA

Inserting NA after Test

我有一个包含两列 data.frames 的列表,时间和信号。 data.frames 是来自定期采样过程的 GC 色谱分析结果。

我想对比一下我收集到的gc数据

我编写了一个函数,将时间和峰面积转换为百分比面积(不包括溶剂峰)和相对保留时间。

由于过程的性质,不同的 GC 具有不同的峰数,因此比较并不简单。杂质出现在我的过程的不同部分,因此产生额外的峰。

我想查看我的列表并找到最长的相对保留时间向量(没问题)。我想使用最长的向量作为比较器,并将 NA 值放在与比较器同时出现但不出现在另一个 data.frames.

中的相对保留时间处

因此得到以下相对保留时间列表的结果,

prac  <- list(a=c(0.203,0.305,0.444,0.780,1.000,1.101,1.403),
          b=c(0.201,0.306,0.442,0.778,1.000,1.101,1.208,1.401))

其中 b 是比较器向量,应该类似于

0.203 0.305 0.444 0.780 1.000 1.101 NA    1.403
0.201 0.306 0.442 0.778 1.000 1.101 1.208 1.401

任何人都可以建议我如何开始吗?

我的第一个想法是 for 循环,但我认为这行不通。请注意,有时需要 1 个以上的 NA 值。

(我计划将所有色谱图的百分比面积与比较器相对保留时间进行比较,如果我能解决这个问题的话)。

这是一个只有一个缺失值的解决方案(蛮力):

prac  <- list(a=c(0.203,0.305,0.444,0.780,1.000,1.101,1.403),
              b=c(0.201,0.306,0.442,0.778,1.000,1.101,1.208,1.401))


NA.index <- which(abs(prac$b[1:length(prac$a)] - prac$a) > 0.05)
newlist.a <- c(prac$a[1:NA.index-1], NA, prac$a[NA.index])

这里应该是可泛化的(取决于你的数据的实际结构):

prac  <- list(a=c(0.203,0.305,0.444,0.780,1.000,1.101,1.403),
              b=c(0.201,0.306,0.442,0.778,1.000,1.101,1.208,1.401))

for(i in seq_along(prac$a)) {
    if(abs(prac$b[i] - prac$a[i]) < 0.05) {
        prac$a[i] <- prac$a[i]
    } else {
        prac$a[i+1] <- prac$a[i]
        prac$a[i] <- NA
    }
}

如果不给出另一个可重现的例子,很难说出如何将其推广到具有多个 NA 的例子,因为现在我只是在摸索你的数据结构