r - 从 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 中另一列中的连续计数灵活计算列
谢谢大家的帮助。以我有限的知识,我似乎无法将您的帮助付诸实践。
解决方案
这是一个基本 R 选项,在一般情况下使用rle
+ split
,即 in 的值b
不限0
于3
。
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 0
to中有值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
推荐阅读
- scala - 如何指定在具有独立类型参数的类的匹配中引入的类型
- c++ - 如果输入数字为负数如何循环
- xml - 负数 XSLT 的 Mod 操作
- doctype - 我们可以使用 XPATH 提取 !DOCTYPE 声明的内容吗?
- apache-spark - SparkSQL 中 REGEXP_INSTR(Redshift 函数)的替代品是什么?
- c# - 如何将 rss-url 保存到 c# 中的 xml 文件?
- java - 返回带有帮助 JSON 的字符串(Java 和 Spring)
- spss - 是否可以在 spss 中打印(显示在输出或单独的表中)计算数据?
- vue.js - Vue.js 上的组合复选框过滤器
- c# - ElasticSearch 7.1 删除索引 C# API