簡體   English   中英

如何根據 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 Rsubset

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM