R 向量回归指数

R 向量回归指数,r,vector,R,Vector,我有一个向量,看起来像这样: c(1,1,1,1,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5..) 我想得到元素变化时的索引,即1,5,9,。。。 我知道如何使用for循环,但我正在尝试一种更快的方法,因为我的向量非常大 谢谢,试试看 which(c(TRUE,diff(v1)!=0)) 或 或者如果向量已排序 head(c(1, findInterval(unique(v1), v1)+1),-1) 数据 试一试 或 或者如果向量已排序

我有一个向量,看起来像这样:

c(1,1,1,1,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5..)
我想得到元素变化时的索引,即1,5,9,。。。 我知道如何使用for循环,但我正在尝试一种更快的方法,因为我的向量非常大

谢谢,

试试看

which(c(TRUE,diff(v1)!=0))

或者如果向量已排序

 head(c(1, findInterval(unique(v1), v1)+1),-1)
数据 试一试

或者如果向量已排序

 head(c(1, findInterval(unique(v1), v1)+1),-1)
数据 另一个有趣的方法:

v1 <- c(1, 1, 2, 3, 4, 4, 5, 6, 7, 7, 7, 8)
head(c(1, cumsum(rle(v1)$lengths) + 1), -1)
结果:1 3 4 5 7 8 9 12

可能看起来很奇怪,但仔细想想很有趣:

说明:cumsumrlev1$Length几乎可以让您一直做到这一点,但它会为您提供序列结束位置的索引,而不是下一个序列开始位置的索引,因此我们在每个元素中添加一个,附加索引1,然后删除最后一个元素。

另一个有趣的方法:

v1 <- c(1, 1, 2, 3, 4, 4, 5, 6, 7, 7, 7, 8)
head(c(1, cumsum(rle(v1)$lengths) + 1), -1)
结果:1 3 4 5 7 8 9 12

可能看起来很奇怪,但仔细想想很有趣:


说明:cumsumrlev1$Length几乎可以让您一路到达那里,但它会给您一个序列结束的索引,而不是下一个序列开始的位置,因此我们在每个元素中添加一个,附加索引1,然后删除最后一个元素。

非常感谢,迅捷elegant@user5726您是否有在间隙后重复的元素,即c1,1,1,2,2,1,1匹配版本很可爱。@BrodieG谢谢,但如果有repeatsTrue,它将不起作用;使用match仍然很有趣,只会首先匹配,这通常感觉像是一种限制。另外,祝贺你在60K。感觉你突破了5万。非常感谢你,快速且准确elegant@user5726您是否有在间隙后重复的元素,即c1,1,1,2,2,1,1匹配版本很可爱。@BrodieG谢谢,但如果有repeatsTrue,它将不起作用;使用match仍然很有趣,只会首先匹配,这通常感觉像是一种限制。另外,祝贺你在60K。感觉你突破了5万。
library(magrittr)
v1 %>%
  rle %>%
  .$lengths %>%
  cumsum %>%
  add(1) %>%
  c(1, .) %>%
  head(-1)