首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >求向量元素第一次变化的索引

求向量元素第一次变化的索引
EN

Stack Overflow用户
提问于 2014-01-03 03:52:21
回答 5查看 5.2K关注 0票数 15

我有一个向量v,我想在R中找到向量元素第一次变化的索引,我该怎么做呢?例如:

代码语言:javascript
运行
复制
v = c(1, 1, 1, 1, 1, 1, 1, 1.5, 1.5, 2, 2, 2, 2, 2)
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-01-03 04:02:21

rle是个好主意,但是如果您只想要转换点的索引,您可以这样做:

代码语言:javascript
运行
复制
c(1,1+which(diff(v)!=0))
## 1 8 10
票数 19
EN

Stack Overflow用户

发布于 2014-01-03 04:00:37

你在找rle

代码语言:javascript
运行
复制
rle(v)
## Run Length Encoding
##   lengths: int [1:3] 7 2 5
##   values : num [1:3] 1 1.5 2

这表明在7+1、7+2+1 (和7+2+5+1 )位置上的值会发生变化(和7+2+5+1将是元素"one one the end“的索引)。

票数 8
EN

Stack Overflow用户

发布于 2014-01-03 13:21:50

data.table包在内部(意思是尚未导出)使用一个函数uniqlist (在dev 1.8.11中),或者使用duplist (在当前的1.8.10 @CRAN中)来实现您所追求的功能。应该会很快的。下面是一个基准:

代码语言:javascript
运行
复制
require(data.table)
set.seed(45)
# prepare a huge vector (sorted)
x <- sort(as.numeric(sample(1e5, 1e7, TRUE)))

require(microbenchmark)
ben <- function(v) c(1,1+which(diff(v)!=0))
matthew <- function(v) rle(v)
matteo <- function(v) firstDiff(v)
exegetic <- function(v) first.changes(v)
# if you use 1.8.10, replace uniqlist with duplist
dt <- function(v) data.table:::uniqlist(list(v))

microbenchmark( ans1 <- ben(x), matthew(x), matteo(x), 
                exegetic(x), ans2 <- dt(x), times=10)

# Unit: milliseconds
#            expr       min         lq     median         uq        max neval
#  ans1 <- ben(x)  1181.808  1229.8197  1313.2646  1357.5026  1553.9296    10
#      matthew(x)  1456.918  1496.0300  1581.0062  1660.4067  2148.1691    10
#       matteo(x) 28609.890 29305.1117 30698.5843 32706.3147 34290.9864    10
#     exegetic(x)  1365.243  1546.0652  1576.8699  1659.5488  1886.6058    10
#   ans2 <- dt(x)   113.712   114.7794   143.9938   180.3743   221.8386    10

identical(as.integer(ans1), ans2) # [1] TRUE

我不太熟悉Rcpp,但似乎解决方案可以改进很多。

编辑:引用Matteo对Rcpp时间的最新答复。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20896242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档