按 R 中的每个 NA 分割向量

Qui*_*ten 14 split r vector

我有以下向量input

input <- c(1,2,1,NA,3,2,NA,1,5,6,NA,2,2)

[1]  1  2  1 NA  3  2 NA  1  5  6 NA  2  2
Run Code Online (Sandbox Code Playgroud)

我想按每个 NA 将这个向量分成多个向量。所以期望的输出应该是这样的:

> output
[[1]]
[1] 1 2 1

[[2]]
[1] 3 2

[[3]]
[1] 1 5 6

[[4]]
[1] 2 2
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,每次 aNA出现时,它都会分裂成一个新的向量。所以我想知道是否有人知道如何将一个向量分割NA成多个向量?

tmf*_*mnk 10

使用与 @tpetzoldt 类似的逻辑,但在拆分之前删除 NA:

split(na.omit(input), cumsum(is.na(input))[!is.na(input)])

$`0`
[1] 1 2 1

$`1`
[1] 3 2

$`2`
[1] 1 5 6

$`3`
[1] 2 2
Run Code Online (Sandbox Code Playgroud)


tpe*_*ldt 8

一种方法可能如下:

  1. 识别NAs
  2. cumsum
  3. 根据累计金额分割
  4. 删除NAs
input <- c(1,2,1,NA,3,2,NA,1,5,6,NA,2,2)
tmp <- cumsum(is.na(input))
lapply(split(input, tmp), na.omit)
Run Code Online (Sandbox Code Playgroud)

  • 感谢@Santiago 的建议。如果没有额外的软件包,也可以使用 `lapply(split(input, tmp), na.omit) |&gt; lapply(\(x) {attributes(x) &lt;- NULL; x})` 。 (2认同)