如何有效地找到R中的值序列并对其进行处理

时间:2017-02-13 23:38:43

标签: r while-loop sequence

假设我有一个整数数组,例如:

p<-c(0,1,0,0,0,1,1,0,1,0)

我需要一种有效的方法来查找最大两个“0”的所有序列。我做了:

j<-2
while (j<length(p)) {
    if(p[j-1]==1&&p[j]==0&&p[j+1]==1){ 
        #do stuff
        j<-j+2
    } else if (p[j-1]==1&&p[j]==0&&p[j+1]==0&&p[j+2]==1){
        #do stuff
        j<-j+3
    } else {
        j<-j+1
    }
}

它可以正常工作但是,因为我在实际案例中使用了一个巨大的向量,我想知道是否有更聪明的方法来做它。

1 个答案:

答案 0 :(得分:0)

我不确定你要对这些值做些什么,所以我不知道你是否想要计算它们,确定它们的位置或改变它们。希望这能让你开始。

library(dplyr)
library(purrr)

p <- c(0,1,0,0,0,1,1,0,1,0)

使用行程编码数据和这些运行的字符串表示来定义整洁的结构

p_rle <- bind_cols(rle(p)) %>% 
  mutate(str = strrep(values, lengths))

p_rle
#> # A tibble: 7 x 3
#>   lengths values   str
#>     <int>  <dbl> <chr>
#> 1       1      0     0
#> 2       1      1     1
#> 3       3      0   000
#> 4       2      1    11
#> 5       1      0     0
#> 6       1      1     1
#> 7       1      0     0

如果需要,这些可以拆分

p_rle$str
#> [1] "0"   "1"   "000" "11"  "0"   "1"   "0"

明确选择仅0或更少<{1}}的{​​{1}}次广告

2

如果您想知道 出现在哪里,您需要做其他事情。