r - 基于最小 5 个连续值的向量序列的子集数据帧

标签 r dataframe sequence subset

我有一个看起来像这样的向量:

out1[1:200]
  [1] NA NA NA NA  0  1  2 NA NA NA  1 NA  0 NA  0  1 NA NA  0 NA  0  1  2  2  2 NA  0  1  2  3  4  4  5  6  7  8  9  9  9  9
 [41] 10 11 NA  0  0 NA  1 NA  0  1 NA  0 NA  0  1  2 NA  1 NA  0  0  0  1  2 NA NA NA  0  0 NA  0  0  0  1  2 NA  1  2 NA  0
 [81]  1  2  3  4  5  6  7  8 NA  0  1  2  3  4 NA  0  1  2  2  3  4  5 NA  0  1  2  3  3  4  5  5  6  7 NA  1  2 NA  1  2 NA
[121]  0  1  2 NA  1  2  3  3  3  3  4 NA  0  0  0  1  2  3  4  5 NA NA  0  1 NA NA NA  1  2  2  3 NA  1  2  2  2 NA NA  0  1
[161] NA  1 NA  1  2 NA  0  0 NA NA  0  1 NA NA NA NA  1  2  3 NA NA  1  2  3  4  5  6 NA  1  2  3  4  5  6  6  7  8 NA  0  1

我现在想对 df 进行子集化(具有相同的长度)由这个向量,但只有范围超过至少 5 个连续数字的序列,例如0:4 或 1:5(当然还有比这更长的时间)。因此,NA的应该是 FALSE以及。

例如。
out1: NA NA 0 1 2 2 NA 0 0 1 2 3 3 4 NA 

那么结果应该是
out2: F F F F F F F T T T T T T T F

最佳答案

以下给出了所需的结果

library(data.table) # v >= 1.9.5 (devel version - install from GitHub)
data.table(x)[,id:=rleid(!is.na(x)),
   ][ , aa:=(.N>5) , by = id
      ][ ,aaa:=4 %in% cumsum(diff(unique(sort(x)))), by = .(id, aa)
         ]$aaa

## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
## [15]  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

数据
x <- c(NA, NA, NA, NA, NA, 0, 1, 2, NA, 0, 1, 2, 3, 4, 4, 5, NA, 1, 2, 3, 3, 3, 3, 4, NA)

关于r - 基于最小 5 个连续值的向量序列的子集数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29669872/

相关文章:

r - 在Linux上使用knitr设置texmaker

r - 从 R 中调试 Fortran 代码

python - 两个 Pandas 数据帧之间的交叉引用

python - 将 Pandas 系列作为一行添加到 Pandas DataFrame

r - 从矩阵中选取一个序列

R 多元回归循环和提取系数

regex - 使用正则表达式分别替换分隔符的开头和结尾

python - 将数据框列拆分为 Pandas 中的相等窗口

node.js - 如何以阻塞方式访问redis而不是nodejs中的非阻塞(事件回调)

php - 无法理解序列图