在R中切出外部NAs

时间:2017-03-13 08:15:27

标签: r na

出于某种目的,我需要在R中用多个NA从向量中剪切外部NA。问题是数字之间可能存在NAs,我需要保留它们。请注意,我的下一步是剪切另一个没有NAs的向量,并且只保留与第一个向量中相同位置的值。这是一个例子:

a <- c(NA, NA, NA, NA, NA, 5,2,3,1,2,1,5,2, NA, NA, 2,3,2,NA,NA,NA)
b <- sample(1:21)

我想要的输出是:

a1 <- c(5,2,3,1,2,1,5,2,NA,NA,2,3,2)
b1 <- b[6:18]

我可以通过条件循环来做到这一点,但我想对它进行矢量化。求救!

3 个答案:

答案 0 :(得分:4)

keep <- !cumprod(is.na(a)) & rev(!cumprod(is.na(rev(a))))
a[keep]
#[1]  5  2  3  1  2  1  5  2 NA NA  2  3  2
b[Keep]

is.na会为TRUE值返回NAcumprod函数将逻辑值强制转换为整数,并为所有其他值返回前导1NA的{​​{1}}。 0(否定)再次将整数值强制转换为逻辑值。然后,我们使用!作为尾随rev s。

答案 1 :(得分:2)

查找第一个和最后一个非NA值并保留向量的那一部分:

a1 <- a[min(which(!is.na(a))):max(which(!is.na(a)))]

> a1
[1]  5  2  3  1  2  1  5  2 NA NA  2  3  2

答案 2 :(得分:2)

使用zoo包:

library(zoo)

na.trim(a)
  

<强>描述

     

用于删除前导和尾随NA的通用函数。