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

时间:2014-10-01 03:11:17

标签: 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

我想根据同时满足的几个条件过滤掉一些记录;比方说,我想从阿根廷(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

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

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

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

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

1 个答案:

答案 0 :(得分:9)

!=是一个运算符,意思是"不等于"。

!表示逻辑否定(NOT

你的病情

iso3!="ARG" & Coverage>93

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

如果你想要

NOT((等于#34; ARG")和(覆盖范围> 93))

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

例如

!(iso == 'ARG' & Coverage > 93)

要完全覆盖基础R中的逻辑运算符,请参阅

help('Logic', package='base')
相关问题