测试后插入 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 的例子,因为现在我只是在摸索你的数据结构
我有一个包含两列 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 的例子,因为现在我只是在摸索你的数据结构