如何根据多个值排除R中的行?

Hit*_*ner 0 r subset

假设我有一个如下所示的数据集:

> data
  iso3 Vaccine Coverage
1  ARG    DPT3       95
2  ARG     MCV       94
3  ARG    Pol3       91
4  KAZ    DPT3       99
5  KAZ     MCV       98
6  KAZ    Pol3       99
7  COD    DPT3       67
8  COD     MCV       62
9  COD    Pol3       66
Run Code Online (Sandbox Code Playgroud)

我想根据同时满足的几个条件过滤掉一些记录; 比方说,我想从阿根廷(ARG)那里删除任何覆盖率超过93%的数据.因此,结果应排除第1行和第2行:

  iso3 Vaccine Coverage
3  ARG    Pol3       91
4  KAZ    DPT3       99
5  KAZ     MCV       98
6  KAZ    Pol3       99
7  COD    DPT3       67
8  COD     MCV       62
9  COD    Pol3       66
Run Code Online (Sandbox Code Playgroud)

我尝试使用,subset()但它排除了太多:

> subset(data, iso3!="ARG" & Coverage>93)
  iso3 Vaccine Coverage
4  KAZ    DPT3       99
5  KAZ     MCV       98
6  KAZ    Pol3       99
Run Code Online (Sandbox Code Playgroud)

问题似乎是&运算符似乎不像布尔AND那样工作,返回两个条件的交集.相反,它的功能类似于布尔OR,返回它们的联合.

我的问题是,我在这里使用什么来强制布尔AND?

mne*_*nel 9

!= 是一个意思是"不平等"的运营商.

!表示逻辑否定(NOT)

你的病情

iso3!="ARG" & Coverage>93
Run Code Online (Sandbox Code Playgroud)

(iso3 不等于 "ARG")AND(覆盖率> 93)

如果你想

NOT((等于"ARG")和(覆盖率> 93))

您需要适当地创建条件,例如

例如

!(iso == 'ARG' & Coverage > 93)
Run Code Online (Sandbox Code Playgroud)

有关基本R中逻辑运算符的完整覆盖,请参阅

help('Logic', package='base')
Run Code Online (Sandbox Code Playgroud)