假设我有一个整数数组,例如:
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
}
}
它可以正常工作但是,因为我在实际案例中使用了一个巨大的向量,我想知道是否有更聪明的方法来做它。
答案 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
如果您想知道 出现在哪里,您需要做其他事情。