删除前导和尾随 NA

Bob*_*esh 4 r subset missing-data na

我需要从向量中删除前导尾随缺失值 ( NA)。NA应保留数字之间的 s。请注意,我的下一步是索引另一个向量,NA并且只保留与第一个向量中位置相同的值。这是示例:

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)
Run Code Online (Sandbox Code Playgroud)

我想要的输出是:

a1 <- c(5,2,3,1,2,1,5,2,NA,NA,2,3,2)
# leading and trailing NAs removed

b1 <- b[6:18]
# subset with the indices kept in "a" above.
Run Code Online (Sandbox Code Playgroud)

我想我可以用条件循环来做到这一点,但我想对它进行矢量化。谢谢你的帮助!

小智 6

查找第一个和最后一个非 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
Run Code Online (Sandbox Code Playgroud)


Rol*_*and 5

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]
Run Code Online (Sandbox Code Playgroud)

is.na返回TRUENA值。该cumprod函数将逻辑值强制转换为整数并返回1前导NAs 和0所有其他值。!(否定)再次将整数值强制为逻辑值。然后我们使用rev尾随NAs。


zx8*_*754 5

使用动物园包:

library(zoo)

na.trim(a)
Run Code Online (Sandbox Code Playgroud)

描述

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