如何 select 数据框中的前 n 个值保留 r 中的重复项

how to select top n values from a data frame retaining the duplicates in r

假设我的样本数据如下所示。

   id freq
    1    4
    2    3
    3    2
    4    2
    5    1

freq 列告诉每个 id 的频率。问题是:我想要前 3 个频率。输出应该是..

   id freq
    1    4
    2    3
    3    2
    4    2

我使用了下面的代码。

d$rank <- rank(-d$freq,ties.method="min")

其中 d 是我的数据框。我使用 rank 命令以便稍后可以 select 前 3 个频率。 我得到的输出是:

id freq rank
 1    4    1
 2    3    2
 3    2    3
 4    2    3
 5    1    5

问题是等级 4 丢失了。我想要连续排名来处理原始数据框中的许多重复值。感谢任何帮助。

谢谢。

假设'freq'降序排列,我们得到'freq'的unique个元素,select前3个用head,用%in% 获取 'freq' 列和 subset 行中那些元素的逻辑索引。

subset(df1, freq %in% head(unique(freq),3))
#  id freq
#1  1    4
#2  2    3
#3  3    2
#4  4    2

如果我们使用 rank,那么 dplyr 中的 dense_rank 将是一个选项

library(dplyr)
df1 %>%
    filter(dense_rank(-freq) < 4)

或使用 data.table 中的 frank 的另一个选项(由@David Arenburg 提供),

library(data.table)
setDT(df)[, .SD[frank(-freq, ties.method = "dense") < 4]]

这是另一种基本的 R 方法:

df[cumsum(!duplicated(df$freq))<4,]
#  id freq
#1  1    4
#2  2    3
#3  3    2
#4  4    2

这假设数据已经按降序排列(如示例所示)。

如果您要使用 dplyr 等外部库,我建议您使用 top_n:

library(dplyr)
top_n(df, 3, freq)
#  id freq
#1  1    4
#2  2    3
#3  3    2
#4  4    2