簡體   English   中英

僅從分組/排序數據中選擇前 n 個值

[英]Selecting only the top n values from grouped/sorted data

我有一個包含 4 個組的數據框(由第 1 列中的類別“a”和“b”以及第 2 列中的類別“X”和“Y”定義)。 我想通過它們在第 4 列中的值對第 3 列中的屬性進行排名,但特別是在第 1 列和第 2 列(AX、AY、BX、BY)中的組內,然后是 select 僅前 n (例如,n = 2)每個組的值。

arrange(col1, col2, desc(col4))用於排列數據,但由於數據在技術上沒有分組,所以像top_n這樣的函數只返回整個列表的前 n 個值。 我想過使用slice_max但無法在我的受限網絡上從 GitHub 安裝 dplyr 的 beta 版本。 最好的方法是什么?

原始數據:

col1    col2    col3    col4
a       X       pat     1
b       Y       dog     2
b       X       leg     3
a       X       hog     4                   
b       Y       egg     5
a       Y       log     6
b       X       map     7
b       Y       ice     8
b       X       mat     9
a       Y       sat     10

arrange(col1, col2, desc(col4))給出

col1    col2    col3    col4
a       X       hog     4
a       X       pat     1
a       Y       sat     10
a       Y       log     6                   
b       X       mat     9
b       X       map     7
b       X       leg     3
b       Y       ice     8
b       Y       egg     5
b       Y       dog     2

但我無法弄清楚如何將其過濾到前 2 個值。

(下面的示例輸入代碼)

col1 <- c('a','b','b','a','b','a','b','b','b','a')
col2 <- c('X','Y','X','X','Y','Y','X','Y','X','Y')
col3 <- c('pat','dog','leg','hog','egg','log','map','ice','mat','sat')
col4 <- c(1,2,3,4,5,6,7,8,9,10)

df <- data.frame(col1,col2,col3,col4)

colA <- c('a','a','a','a','b','b','b','b','b','b')
colB <- c('X','X','Y','Y','X','X','X','Y','Y','Y')
colC <- c('hog','pat','sat','log','mat','map','leg','ice','egg','dog')
colD <- c(4,1,10,6,9,7,3,8,5,2)

df1 <- data.frame(colA,colB,colC,colD)

我們可以在按'colA','colB'分組后使用top_n

library(dplyr)
df %>% 
     group_by(colA, colB) %>%
     top_n(2)

暫無
暫無

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

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