R:删除序列中缺失值后面的行

标签 r sequence

我让不同的人进行了测试,并分配了一个测试编号,以形成一个范围从 0 到 3 的序列。例如:

ID            Nb_Test
A1            0
A1            1
A1            2
A2            1
A2            2
A2            3
A3            0
A3            1
A3            3

如何删除没有测试 #0 的每个人的测试以及序列中断后的测试。例如,我希望它看起来像这样:

ID            Nb_Test
A1            0
A1            1
A1            2
A3            0
A3            1

最佳答案

有几种可能性,都依赖于相同的两个逻辑检查:对于组中的 0 any 位置,以及 diff >序列中的erence是1

基础R

dat[as.logical(ave(dat$Nb_Test, dat$ID, FUN=\(x) any(x==0) & c(TRUE, diff(x) == 1))),]
#  ID Nb_Test
#1 A1       0
#2 A1       1
#3 A1       2
#7 A3       0
#8 A3       1

数据表

library(data.table)
setDT(dat)
dat[, if(any(Nb_Test==0)) .SD[c(TRUE, diff(Nb_Test) == 1)], by=ID]
#   ID Nb_Test
#1: A1       0
#2: A1       1
#3: A1       2
#4: A3       0
#5: A3       1

dplyr

library(dplyr)
dat %>%
  group_by(ID) %>%
  filter(any(Nb_Test == 0) & c(TRUE, diff(Nb_Test) == 1))
## A tibble: 5 x 2
## Groups:   ID [2]
#  ID    Nb_Test
#  <chr>   <int>
#1 A1          0
#2 A1          1
#3 A1          2
#4 A3          0
#5 A3          1

关于R:删除序列中缺失值后面的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73953615/

相关文章:

sql - 在表中添加一个带有序列的新列 - Oracle

r - 在 R 中安装 ESSURVEY 包时出错

R: 从长格式表到 "diagonal"格式

mysql - Postgres 从序列中提取多个 future 的键

algorithm - 如何按顺序标记列表列表?

python - 计算自最后一个头以来的尾数

r - 使用 group_by 时发生 mutate_at 评估错误

R嵌套模型: create column of model formulas

r - 使用 data.table 根据条件创建二进制列

java - 在java中使用do-while循环的斐波那契数列?