2017-08-25 15 views
0

次のサンプルのような大きなデータフレーム(df)があります。データセットに多数のデータ入力エラーがあり、これらを削除する必要があります。サンプルデータでは、すべてのNSW州は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)、状態)] [.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

ご意見ありがとうございます。この例ではそれ以上の数の組み合わせがあるため、この例では受け入れられたソリューションが最も効果的です。 :) –

関連する問題