r-用NA完成/填充排序的整数序列



考虑这个排序向量:

x <- c(3, 4, 6, 8, 9, 10, 18)

有没有一种简单的方法可以用NA完成序列,即获得:

#[1] 3  4 NA  6 NA  8  9 10 NA NA NA NA NA NA NA 18

您可以创建完整序列并在不匹配的数字上添加NA:

s <- seq(min(x), max(x))
s[!s %in% x] <- NA
#[1]  3  4 NA  6 NA  8  9 10 NA NA NA NA NA NA NA 18

您甚至可以创建函数,将矢量、最小值和最大值作为输入,并将NA添加到不匹配的数字:

fill_seq <- 
function(x, min = NULL, max = NULL, by = 1){
min = if(is.null(min)) min(x) else min
max = if(is.null(max)) max(x) else max

s <- seq(min, max, by = by)
s[!s %in% x] <- NA
s
}

示例:

fill_seq(x)
# [1]  3  4 NA  6 NA  8  9 10 NA NA NA NA NA NA NA 18
fill_seq(x, min = 1, max = 20)
#  [1] NA NA  3  4 NA  6 NA  8  9 10 NA NA NA NA NA NA NA 18 NA NA
fill_seq(x, by = 0.5)
# [1]  3 NA  4 NA NA NA  6 NA NA NA  8 NA  9 NA 10 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 18

使用replace

replace(array(dim=max(x)), x, x)[-seq_len(min(x) - 1)]
# [1]  3  4 NA  6 NA  8  9 10 NA NA NA NA NA NA NA 18

最新更新