相关疑难解决方法(0)

如何将矢量划分为常规连续序列组?

我有一个矢量,例如c(1, 3, 4, 5, 9, 10, 17, 29, 30),我想将"相邻"元素组合在一起,形成一个规则的连续序列,在一个参差不齐的矢量中导致:

L1:1
L2:3,4,5
L3:9,10
L4:17
L5:29,30

朴素代码(前C程序员):

partition.neighbors <- function(v)
{
    result <<- list() #jagged array
    currentList <<- v[1] #current series

    for(i in 2:length(v))
    {
        if(v[i] - v [i-1] == 1)
        {
            currentList <<- c(currentList, v[i])
        }
        else
        {
            result <<- c(result, list(currentList))
            currentList <<- v[i] #next series
        }       
    }

    return(result)  
}
Run Code Online (Sandbox Code Playgroud)

现在我明白了

a)R不是C(尽管有大括号)
b)全局变量是纯粹的邪恶
c)这是一种实现结果的非常低效的方法

,欢迎任何更好的解决方案.

r vector data-partitioning

14
推荐指数
4
解决办法
3651
查看次数

确定 R 中连续数字的序列

类似于在列表中查找连续数字组在 R 中查找向量中的连续值,不同之处在于我有一个可能高达 4 的数字序列,即

 y=c(4*1:4,24,31,33,39,4*16:20)
> y
 [1]  4  8 12 16 24 31 33 39 64 68 72 76 80
Run Code Online (Sandbox Code Playgroud)

我想要一个函数来返回每个由最多 4 个分隔的值序列,所以我得到:

4 8 12 16 # all sep by at most 4
31 33 # all sep by at most 4
64 68 72 76 80 # all sep by at most 4
Run Code Online (Sandbox Code Playgroud)

我试过:

st=c(1,which(diff(y)<5)+1)
en=c(st-1,length(y))
y[st]
[1]  4  8 12 16 33 68 72 76 80
y[en]
[1]  4 …
Run Code Online (Sandbox Code Playgroud)

diff r sequence

3
推荐指数
1
解决办法
952
查看次数

标签 统计

r ×2

data-partitioning ×1

diff ×1

sequence ×1

vector ×1