2016-07-11 7 views
0

私は2つの列、metro、stateを持つデータセットを持っています。私は今だけ最大カウントされているデータフレーム内の行をフィルタリングし、残りを残したいdplyr groupbyに基づいて行をフィルタリングし、出力を集計します

metro   State   count 
A    OH   703 
A    NJ    3 
B    GA   1453 
B    CA   456 
B    WA   123 

、私は次の出力を得る

data %>% group_by(metro, State) %>% summarise(count = n()) 

、dplyrで次のコマンドを与えます。私は対応する行をフィルタリングする必要があります。次のコマンドの行をフィルタリング後の出力は、すべての地下鉄は、最大カウントの状態であり、残りが除去された状態のみを持っている

data %>% group_by(metro, State) %>% summarise(count = n()) 

    metro   State   count 
    A    OH   703 
    B    GA   1453 

でなければなりません。

以下は私がしようとしている

data %>% group_by(metro, State) %>% filter(n() == max(n())) 

をしかし、これは再度、入力と同じデータフレームを配っています。

誰でもこの作業を手伝うことができますか?私の出力はすべてのメトロが最大数を持つ一意の状態を持つ必要があり、残りの状態エントリは削除する必要があります。

data1 <- data %>% group_by(metro, State) %>% mutate(count = n()) %>% 
        group_by(metro) %>% filter(count == max(count)) 

nrow(data1) 
+1

'データ%>%GROUP_BY(地下鉄)%>%フィルタ(== MAX(カウント)をカウント)' – Psidom

+0

@Psidomこれはまだ私を与えるを使用することができますメトロでグループ化するとカウントが加算され、最大エントリーを除外できないため、同じ出力です。 – haimen

+0

@Psidom要約後にフィルタリングすることができました。私の質問は、元のデータフレームを対応する行でフィルタリングすることです。以前にデータフレームに2738行がある場合、フィルタリング後に2156行が必要です。 (3、456、123)カウントに対応する行は削除する必要があります。 – haimen

答えて

3

あなたが最初にGROUPBY地下鉄と状態はカウントを取得し、その後地下鉄をGROUPBY、各地下鉄内の最大数に等しくない場合、カウントを除外し、ダブルステージGROUPBYを必要とします

我々はまた、data.table

library(data.table) 
setDT(data)[, count := .N , .(metro, state)][, .SD[count == max(count)] , .(metro)] 
+0

私はあなたがなぜ異なる結果を得るのか分かりません。しかし、これは私のために働いているようです。これはあなたが必要とするものですか? – Psidom

+0

これは私の質問の要件ではありません。私はコメントに私の説明を与えました。私は、データフレーム内の対応する行を削除したい。要約された行ではありません。 – haimen

+0

要約後にフィルタリングすることができました。私の質問は、元のデータフレームを対応する行でフィルタリングすることです。以前にデータフレームに2738行がある場合、フィルタリング後に2156行が必要です。 (3、456、123)カウントに対応する行は削除する必要があります。 – haimen

関連する問題