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)