删除前导和尾随 NA
Remove leading and trailing NA
我需要从向量中删除 leading 和 trailing 缺失值 (NA
)。 NA
数字之间应保留。请注意,我的下一步是索引另一个没有 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)
我想要的输出是:
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.
我想我可以使用条件循环来做到这一点,但我想对其进行矢量化。感谢您的帮助!
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
returns TRUE
NA
值。 cumprod
函数将逻辑值强制为整数,returns 1
用于前导 NA
和 0
用于所有其他值。 !
(否定)再次将整数值强制转换为逻辑值。然后我们使用 rev
作为尾随的 NA
s.
查找第一个和最后一个非 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
使用动物园包:
library(zoo)
na.trim(a)
Description
Generic function for removing leading and trailing NAs.
我需要从向量中删除 leading 和 trailing 缺失值 (NA
)。 NA
数字之间应保留。请注意,我的下一步是索引另一个没有 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)
我想要的输出是:
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.
我想我可以使用条件循环来做到这一点,但我想对其进行矢量化。感谢您的帮助!
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
returns TRUE
NA
值。 cumprod
函数将逻辑值强制为整数,returns 1
用于前导 NA
和 0
用于所有其他值。 !
(否定)再次将整数值强制转换为逻辑值。然后我们使用 rev
作为尾随的 NA
s.
查找第一个和最后一个非 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
使用动物园包:
library(zoo)
na.trim(a)
Description
Generic function for removing leading and trailing NAs.