根据多个条件从DF中删除数据

时间:2017-08-25 00:39:20

标签: r filter

我有一个大型数据框(df),看起来像下面的示例。数据集中存在许多数据输入错误,我需要删除它们。在样本数据中,所有新南威尔士州应该有一个以2开头的邮政编码。所有VIC国家都应该有一个以3开头的邮政编码。

| Suburb | State | Postcode |
| ------ | ----- | -------- |
| FLEMINGTON | NSW | 2140 |
| FLEMINGTON | NSW | 2144 |
| FLEMINGTON | NSW | 3996 |
| FLEMINGTON | VIC | 2996 |
| FLEMINGTON | VIC | 3021 |
| FLEMINGTON | VIC | 3031 |

我需要决赛桌看起来像......

| Suburb | State | Postcode |
| ------ | ----- | -------- |
| FLEMINGTON | NSW | 2140 |
| FLEMINGTON | NSW | 2144 |
| FLEMINGTON | VIC | 3021 |
| FLEMINGTON | VIC | 3031 |

以下解决方案有点接近,但我不知道如何过滤以特定数字开头的整数并且在时间压力下。

Extracting rows from df based on multiple conditions in R

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

为了使其易于扩展,请将其作为合并操作,仅针对每种状态的可接受值:

A

答案 1 :(得分:0)

试试这个?如果您的邮政编码是整数&这些是唯一的条件,它应该非常简单:

df <- data.frame(Suburb = rep("FLEMINGTON", 6),
                 State = c(rep("NSW", 3), rep("VIC", 3)),
                 Postcode = c(2140,2144,3996,2996,3021,3031))

library(dplyr)

df <- df %>%
  filter((State == "NSW" & Postcode < 3000) | (State == "VIC" & Postcode >= 3000))

> df
      Suburb State Postcode
1 FLEMINGTON   NSW     2140
2 FLEMINGTON   NSW     2144
3 FLEMINGTON   VIC     3021
4 FLEMINGTON   VIC     3031