我有不同的人执行测试,并被赋予一个测试编号,以形成一个范围从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的位置是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

data.table

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相关问答推荐

是否可以 Select 安装不带文档的R包以更有效地存储?

R创建一个数据透视表,计算多个组的百分比

在位置周围设定一个半径并识别该半径内的其他位置

x[[1]]中的错误:脚注越界

如何修复R码的置换部分?

如何根据组大小应用条件过滤?

在"gt"表中添加第二个"groupname_col",而不连接列值

如何从当前行上方找到符合特定条件的最接近值?

迭代通过1个长度的字符串长字符R

如何在格子中添加双曲曲线

将饼图插入条形图

从服务器在Shiny中一起渲染图标和文本

如何在PackageStatus()中列出&q;不可用的包&q;?

如何识别倒排的行并在R中删除它们?

层次树图的数据树

主题(Legend.key=Element_RECT(Fill=&Quot;White&Quot;))不起作用

在同一单元格中创建包含整数和百分比的交叉表

抽样变换-REXP与RWEIBUR

如何在R中的两列以上使用联合(&U)?

Ggplot2水平线和垂直线的图例图标不匹配