计算每个向量的尾随和前导NA

Afi*_*ari 9 r vector na

我有一些以下格式的载体

    v1 <- c(NA,NA,NA,10,10,10,10)
    v2 <- c(NA,NA, 3, 3, 3,NA,NA)
    v3 <- c( 5, 5, NA,NA,NA,NA,NA)
Run Code Online (Sandbox Code Playgroud)

对于每个向量,我想计算多少个前导NA和尾随NA。

    For v1, LeadNA = 3, TrailNA = 0
    For v2, LeadNA = 2, TrailNA = 2
    For v3, LeadNA = 0, TrailNA = 5
Run Code Online (Sandbox Code Playgroud)

akr*_*run 6

1)Cumsum-一种选择是cumsum在存在非NA元素的情况下创建逻辑向量,并获得sum(base R-不使用包)

f1 <- function(vec, trail = FALSE) {
  if(trail) {
     vec <- rev(vec)
    }
    sum(!cumsum(!is.na(vec)))
 }

f1(v1)
#[1] 3
f1(v1, TRUE)
#[1] 0

sapply(mget(paste0("v", 1:3)), f1)
#  v1 v2 v3 
# 3  2  0 
sapply(mget(paste0("v", 1:3)), f1, TRUE)  
#  v1 v2 v3 
#  0  2  5 
Run Code Online (Sandbox Code Playgroud)

2步 -另一个base R选择是rle(不使用软件包)

with(rle(is.na(v2)), lengths[values & seq_along(values) %in% c(1, length(values))])
Run Code Online (Sandbox Code Playgroud)