2017-08-25 56 views
0

我有一個大的數據框(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

任何幫助將不勝感激。

回答

3

爲了使這很容易擴展上,做得一樣只針對你的每個狀態可接受值的合併操作:

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 
+0

像夢一樣工作。 :) –

+0

或者通過計算頻率setDT(df)[,N:= .N,。(substr(Postcode,1,1),State)] [,.SD [N == max(N)] ,狀態] [,N:= NULL] []' – akrun

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 
+0

感謝您的評論。除了示例中的組合之外,還有很多組合,因此接受的解決方案在此情況下效果最佳。 :) –