【问题标题】:Inserting NA after Test测试后插入 NA
【发布时间】:2015-04-29 13:07:53
【问题描述】:

我有一个包含两列时间和信号的 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 值。

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

【问题讨论】:

  • 我不知道你真正想要的是什么,它似乎很简单,但在所有这些保留比较器 bla bla -fog 背后,我看不到你问题的基本组成部分......;所以:为什么你的列表的第 7 个值是 NA?什么条件使它不适用?你想如何过滤、选择、应用条件或其他任何东西到你的列表实践中?我不知道你是如何从 prac 到“比较向量”的???
  • @grrgrrbla 初始列表,prac
  • 相似是什么意思?完全相等?或在什么范围内相等?因为向量 a 和 b(除了 [5] 和 [6])的索引值都不完全相等;一般提示:尝试从你的“特殊名称”中抽象出来,只看问题的抽象属性,这样不知道时间信号处理如何工作的人(比如我)可以更轻松地帮助你,没有人回答在这里 1 小时,这在 SO 上是不寻常的,并且表明您没有清楚地说明您的问题
  • @grrgrrbla 等于内部界限(信号从色谱图漂移到色谱图;我可以做界限)。此外,我认为我的答案将与stackoverflow.com/questions/18951248/…stackoverflow.com/questions/1493969/… 类似,但目前我仍然需要其他人的意见。
  • 两个向量之间应该比较哪些元素?最亲近的人?

标签: r list na


【解决方案1】:

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

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 的示例,因为现在我只是在黑暗中挖掘您的数据结构

【讨论】:

  • 边界 +/- 0.005。哪些元素按什么顺序排列?每个色谱图的 rrt 1.000 峰与要比较的从该色谱图中扩展的峰相同;因此, prac$a[1:5] 和 prac$b[1:5] 可以进行比较,但 prac$a[6:7] 需要 NA 才能与 prac$[6:8] 进行比较。我的问题是如何获得 NA ...如果我能做到,我应该能够将功能扩展到更困难的情况。
  • 请给我另一个例子,说明您的数据中存在超过 2 个预期的 NA 值
  • 这是一个 dput 输出,structure(list(a = c(0.203, 0.305, 0.444, 0.78, 1, 1.101, 1.403), b = c(0.201, 0.306, 0.442, 0.778, 1, 1.101, 1.208, 1.401), d = c(0.201, 0.306, 0.778, 1, 1.101, 1.208, 1.401), e = c(0.201, 0.442, 0.778, 1, 1.101, 1.401), f = c(0.442, 0. , 1, 1.101, 1.208, 1.401)), .Names = c("a", "b", "d", "e", "f")) where 'a' and 'b' where as before but d ,e 和 f 在序列的不同部分有缺失值。 (但您已经为回答这个问题做了很多工作:事实上,您已经回答了最初的问题,我将在接下来的几天内结束)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 2012-03-19
相关资源
最近更新 更多