r - 将被n个零分隔的向量分成不同的组

标签 r

我有一个矢量x

x = c(1, 1, 2.00005, 1, 1, 0, 0, 0, 0, 1, 2, 0, 3, 4, 0, 0, 0, 0, 1, 2, 3, 1, 3)

我需要将由n(在这种情况下,假设n3)或多个零分隔的值分成不同的组。

所需的输出将是
list(x1 = c(1, 1, 2.00005, 1, 1),
     x2 = c(1, 2, 0, 3, 4),
     x3 = c(1, 2, 3, 1, 3))
#$x1
#[1] 1.00000 1.00000 2.00005 1.00000 1.00000

#$x2
#[1] 1 2 0 3 4

#$x3
#[1] 1 2 3 1 3

以下内容不起作用,因为即使组中的x零个数少于零,它也会拆分n
temp = cumsum(x == 0)
split(x[x!=0], temp[x!=0])
#$`0`
#[1] 1.00000 1.00000 2.00005 1.00000 1.00000

#$`4`
#[1] 1 2

#$`5`
#[1] 3 4

#$`9`
#[1] 1 2 3 1 3

最佳答案

这是我的尝试。此方法用NA替换长度小于或等于3的零游程。由于使用split()时不适用NA,因此我们得到了所需的输出。

x <- c(1, 1, 2.00005, 1, 1, 0, 0, 0, 0, 1, 2, 0, 3, 4, 0, 0, 0, 0, 1, 2, 3, 1, 3)

ll <- with(rle(x == 0), {
  ifelse(x == 0 & (seq_along(x) != cumsum(lengths)[lengths <= 3 & values]), NA, x)
})

split(x, with(rle(is.na(ll)), rep(1:length(lengths), lengths) + ll * 0))
# $`1`
# [1] 1.00000 1.00000 2.00005 1.00000 1.00000
#
# $`3`
# [1] 1 2 0 3 4
#
# $`5`
# [1] 1 2 3 1 3

关于r - 将被n个零分隔的向量分成不同的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45968119/

相关文章:

r - 在 r 的 for() 循环中转置和重命名数据帧

r - 有没有一种方法可以将两个在 R 中互换的变量分组

c++ - 如何在 R 中将 C++ ODE 求解器与 Rcpp 一起使用?

r - 寻找上一个星期一

r - apply() 并计算所有数据帧行的第一行的比例

r - 计算R中具有不同数据点的两条曲线的残差

r - 带有长文本、项目符号和特定表格宽度的表格

r - 如何将多个 R 文件聚合为一个文件

R从带有R的下载链接中读取excel文件

r - R 中提取反事实 ARIMA 预测的函数