根据多个条件从DF中删除数据
问题描述:
我有一个大的数据框(df),看起来像下面的示例。数据集中有许多数据输入错误,我需要删除这些错误。在样本数据中的所有新南威尔士州国家应该有一个邮政编码开头2.所有VIC国家应该有一个邮编开始3根据多个条件从DF中删除数据
| 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
任何帮助将不胜感激。
答
为了使这很容易扩展上,做得一样只针对你的每个状态可接受值的合并操作:
merge(
transform(dat, Pc1=substr(Postcode,1,1)),
data.frame(State=c("NSW","VIC"),Pc1=c("2","3"))
)
# State Pc1 Suburb Postcode
#1 NSW 2 FLEMINGTON 2140
#2 NSW 2 FLEMINGTON 2144
#3 VIC 3 FLEMINGTON 3021
#4 VIC 3 FLEMINGTON 3031
答
试试这个吗?如果你的邮编是整数&只有这些条件,它应该是非常简单的:
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
+0
感谢您的评论。除了示例中的组合之外,还有很多组合,因此接受的解决方案在此情况下效果最佳。 :) –
像梦一样工作。 :) –
或者通过计算频率setDT(df)[,N:= .N,。(substr(Postcode,1,1),State)] [,.SD [N == max(N)] ,状态] [,N:= NULL] []' – akrun