![](/img/trans.png)
[英]How to filter entries from a list of dataframes based on multiple criteria in R
[英]How to filter rows based on multiple criteria in R?
我有一個df1:
ID ID2 Code
22 11 994
22 28 996
22 35 999
22 36 997
22 40 998
24 17 991
24 18 998
24 20 998
52 31 991
52 39 991
80 45 994
87 66 998
90 67 995
81 62 991
81 63 991
81 64 990
90 69 997
90 70 998
94 74 994
97 82 996
每個 ID 都是一個人。 我擺脫了曾經擁有不是'990、991、992或998“的代碼的人。例如,ID 22有一個代碼994,所以我想擺脫他們。ID 24只有數字從這個選擇批次中,所以我想保留所有 ID 24 的行。Output 將是:
ID ID2 Code
24 17 991
24 18 998
24 20 998
52 31 991
52 39 991
87 66 998
81 62 991
81 63 991
81 64 990
按“ID”分組, filter
all
“代碼”是%in%
來自 990:992 或 998 的值的向量
library(dplyr)
df1 %>%
group_by(ID) %>%
filter(all(Code %in% c(990:992, 998))) %>%
ungroup
-輸出
# A tibble: 9 x 3
# ID ID2 Code
# <int> <int> <int>
#1 24 17 991
#2 24 18 998
#3 24 20 998
#4 52 31 991
#5 52 39 991
#6 87 66 998
#7 81 62 991
#8 81 63 991
#9 81 64 990
或者可以不分組完成
df1 %>%
filter(!ID %in% ID[!Code %in% c(990:992, 998)])
或者使用來自base R
的subset
subset(df1, !ID %in% ID[!Code %in% c(990:992, 998)])
df1 <- structure(list(ID = c(22L, 22L, 22L, 22L, 22L, 24L, 24L, 24L,
52L, 52L, 80L, 87L, 90L, 81L, 81L, 81L, 90L, 90L, 94L, 97L),
ID2 = c(11L, 28L, 35L, 36L, 40L, 17L, 18L, 20L, 31L, 39L,
45L, 66L, 67L, 62L, 63L, 64L, 69L, 70L, 74L, 82L), Code = c(994L,
996L, 999L, 997L, 998L, 991L, 998L, 998L, 991L, 991L, 994L,
998L, 995L, 991L, 991L, 990L, 997L, 998L, 994L, 996L)),
class = "data.frame", row.names = c(NA,
-20L))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.