首页 > 解决方案 > 从 R 中 n 个连续值不为 0 的向量创建向量列表

问题描述

所以我有这个向量:

a = sample(0:3, size=30, replace = T)
 [1] 0 1 3 3 0 1 1 1 3 3 2 1 1 3 0 2 1 1 2 0 1 1 3 2 2 3 0 1 3 2

我想要的是一个向量列表,其中包含由 n 0 分隔的所有元素。所以在这种情况下,n = 0(连续值之间不能有任何 0),这将给出:

res = c([1,3,3], [1,1,1,3,3,2,1,1,3], [2,1,1,2]....)

但是,如果我将其设置为 2,我想灵活地控制 n 参数,例如:

b = c(1,2,0,3,0,0,4)

仍然会导致这样的结果

res = c([1,2,3],[4])

在尝试计算 0 的数量时,我尝试了很多使用 for 循环中的 while 循环的方法。但我就是无法实现。

更新

我试图在这里以更真实的环境发布问题: 根据 R 中另一列中的连续计数灵活计算列

谢谢大家的帮助。以我有限的知识,我似乎无法将您的帮助付诸实践。

标签: rlistfor-loopwhile-loop

解决方案


这是一个基本 R 选项,在一般情况下使用rle+ split,即 in 的值b不限03

with(
  rle(with(rle(b == 0), rep(values & lengths == n, lengths))),
  Map(
    function(x) x[x != 0],
    unname(split(b, cut(seq_along(b), c(0, cumsum(lengths))))[!values])
  )
)

这给出(假设n=2

[[1]]
[1] 1 2 3

[[2]]
[1] 4

如果你在 ragne 0to中有值9,你可以试试下面的代码

lapply(
  unlist(strsplit(paste0(b, collapse = ""), strrep(0, n))),
  function(x) {
    as.numeric(
      unlist(strsplit(gsub("0", "", x), ""))
    )
  }
)

这也给出了

[[1]]
[1] 1 2 3

[[2]]
[1] 4

推荐阅读