首页 > 解决方案 > 使用 dplyr R 删除在超过“n”个时间点具有零值的 ID

问题描述

我的数据框看起来像这样

value <- c(0,0.1,0.2,0.4,0,0.05,0.05,0.5,0.20,0.40,0.50,0.60)
time <- c(0,0,0,0,1,1,1,1,2,2,2,2)
ID <- c(1,2,3,4,1,2,3,4,1,2,3,4)

test <- data.frame(value, time, ID)
test

   value time ID
1   0.00    0  1
2   0.10    0  2
3   0.20    0  3
4   0.40    0  4
5   0.00    1  1
6   0.05    1  2
7   0.05    1  3
8   0.50    1  4
9   0.20    2  1
10  0.40    2  2
11  0.50    2  3
12  0.60    2  4

我想删除值==0 大于或等于两个时间点的所有 ID 我希望我的数据框看起来像这样,(删除具有两个时间点值 = 0 的 ID=1)

2   0.10    0  2
3   0.20    0  3
4   0.40    0  4
6   0.05    1  2
7   0.05    1  3
8   0.50    1  4
10  0.40    2  2
11  0.50    2  3
12  0.60    2  4

标签: rdplyrtidyversetidyrtidy

解决方案


我们可以filter通过获取表达式的计数来使用逻辑条件,value == 0然后sum将其转换为小于 2 的逻辑条件(在按“ID”分组后)

library(dplyr)
test %>%
    group_by(ID) %>%
    filter(sum(value == 0) <2)

推荐阅读