【问题标题】:Find exact vector (with ones) inside 0-1 vector in R在R中的0-1向量内找到精确向量(带一个)
【发布时间】:2018-11-13 18:35:23
【问题描述】:

我想在另一个向量中找到一个向量。我将始终在零和一的向量内寻找只有“一”的向量。 例如 c(0,0,1,1,1,0,1) 中的 c(1,1,1)。 我已经想出了一个解决方案:

grepl(paste(x1,collapse=";"),paste(x2,collapse=";"))

问题是我想搜索 exact 向量所以

c(1,1) inside c(0,1,1,0) --> TRUE

c(1,1) inside c(0,1,1,1) --> FALSE

【问题讨论】:

标签: r rstudio


【解决方案1】:

我们可以为此使用rle

f1 <- function(vec1, patvec) {
     with(rle(vec1), lengths[as.logical(values)]) == length(patvec)
  }

f1(v1, pat)
#[1] TRUE
f1(v2, pat)
#[1] FALSE

或者split通过vector的rleid得到vector,然后检查all是否找到patternvector的元素

any(sapply(split(v1, data.table::rleid(v1)), function(x) all(pat %in% x)))
#[1] TRUE

数据

pat <- c(1, 1)
v1 <- c(0,1,1,0)
v2 <- c(0,1,1,1) 

【讨论】:

  • 嗨,不幸的是,没有一个想法对我来说是完美的——第一个(函数)给了我向量,所以当 pat
  • 好吧,这对我来说太愚蠢了,我刚刚在函数中添加了任何内容,现在它已经完美了 :) 非常感谢!
  • 如果我想保存它的索引怎么办?我知道这是另一个问题......但是如果我不想只是在里面找到 c(1,1) 让我们说 c(0,0,1,1,0,1) 但记住索引所以 [ 3,4] 在这种情况下...有可能吗?
  • @jake-ferguson 在这种情况下,您可能需要which,即which(pat %in% x)which(sapply(split(...,具体取决于您的需要
猜你喜欢
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
相关资源
最近更新 更多