我有一个这样的向量:
foo <- c(0, 1, 2, 3, 0, 0, 4, 5, 6, 7, 0, 0, 0, 5, 4, 0, 0, 1)
我想从中获取以下向量列表:
(1, 2, 3)
(4, 5, 6, 7)
(5, 4)
(1)
即选择值大于某个阈值(在本例中为 0)的点组。现在我做了这样一个拐杖算法:
thres <- 0 # порог
foo <- c(0, 1, 2, 3, 0, 0, 4, 5, 6, 7, 0, 0, 0, 5, 4, 0, 0, 1)
bar <- list()
temp <- c()
for(i in 1:length(foo))
{
if(foo[i] > thres)
{
temp <- append(temp, foo[i])
}
else
{
if(length(temp) > 0)
{
bar[length(bar)+1] <- list(temp)
temp <- c()
}
}
}
问题是如果向量不以零结尾,那么最后一组点不包含在列表中。事实证明,您仍然需要输入一个附加标志。也许有一些使用内置函数或一些额外库的更简单的解决方案?
我们使用逻辑向量、累积和和
split
。我想出了这个(也是一个拐杖)选项:
事实证明
然后只剩下选择长度大于 0 的字符串并重新划分为数字。如果数字多于一位,则必须指定类似的内容
collapse = "_"
并除以"_"
。