假设我有这个整数 vector
:
> int.vec
[1] 1 2 3 5 6 7 10 11 12 13
(从 int.vec <- c(1:3,5:7,10:13)
创建)
我正在寻找一个函数,它将返回此向量中所有间隔的长度之和。
所以基本上是int.vec
该函数将返回:
3+3+4 = 10
最佳答案
length(int.vec)
# 10
您的间隔是数字序列,x1:xn
、x1:xm
、x1:xp
,其中每个向量的长度 (或本例中的间隔)分别为 n
、m
和 p
。
整个向量的长度为length(x1:xn)
+ length(x1:xm)
+ length(x1:xp)
,
与 length(n + m + p)
相同。
现在,如果我们确实对每个序列向量的长度感兴趣,我们可以这样做
int.vec <- c(1:3,5:7,10:13)
## use run-length-encoding (rle) to find sequences where the difference == 1
v <- rle(diff(int.vec) == 1)[[1]]
v[v!=1] + 1
# [1] 3 3 4
而且,正如 @AHandcartAndMohair 所指出的,如果您正在使用列表,则可以使用 lengths
int.list <- list(c(1:3), c(5:7), c(10:13))
lengths(int.list)
# [1] 3 3 4
关于r - 整数向量的区间长度总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36122916/