如何 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
假设我的样本数据如下所示。
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