簡體   English   中英

根據dplyr groupby過濾行,匯總輸出

[英]Filter rows based on the dplyr groupby, summarize output

我有一個包含兩列的數據集,都市圈,狀態。 我在dplyr中給出以下命令,

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

我得到以下輸出,

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())

   metro           State         count 
    A                OH            703
    B                GA           1453

每個都市圈只有一個狀態,即狀態數最大且剩余的狀態將被刪除。

以下是我的嘗試,

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

但是,這再次給出了與輸入相同的數據幀。

有人可以幫我嗎? 我的輸出應該是每個都市圈都應具有唯一的狀態,該狀態應具有最大數量,其余的狀態條目應被刪除。

謝謝

您需要一個雙階段groupby,首先groupby Metro和state獲得計數,然后groupby metro並過濾掉不等於每個Metro中最大計數的計數:

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

nrow(data1)

我們也可以使用data.table

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM