2个条件的top_n

时间:2019-10-24 08:50:15

标签: r top-n

我对dplyr的top_n函数有疑问。如何使用top_n函数基于两列提取两个值。

以下示例:我有一个数据帧DT。现在我要提取前5行。但是我想首先基于Y对其进行排序,然后基于X进行排序。因此,最终,我检索了一个像RESULT这样的数据框。 谢谢您的帮助!

X<-c(2,8,7,6,4,4,3)
Y<-c(10,9,9,8,8,8,8)
DT<-data.frame(Term,X,Y)```

# What I tried so far
DT %>% top_n(n=5)
DT %>% top_n(n=5, w=X)
DT %>% top_n(n=5) %>% top_n(n=5, w=X)

# What I want to have
X<-c(2,8,7,6,4,4)
Y<-c(10,9,9,8,8,8)
Result<-data.frame(Term,X,Y)

1 个答案:

答案 0 :(得分:2)

top_n仅可用于1个变量。 您使用排列然后头,例如:

df =data.frame(
Term = sample(letters,20,replace=T),
X=sample(1:5,20,replace=T),
Y=sample(1:5,20,replace=T)
)
# if you want the top 5 values
df %>% arrange(desc(X),desc(Y)) %>% head(5)
# if you want top 5 unique values, i.e ties count as 1
df %>% arrange(desc(X),desc(Y)) %>%
mutate(rank=cumsum(!duplicated(.))) %>% filter(rank<=5)