Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从保留r中重复项的数据框中选择前n个值_R_Rank - Fatal编程技术网

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

如何从保留r中重复项的数据框中选择前n个值,r,rank,R,Rank,假设我的示例数据如下所示 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") 问题是缺少第4级。我希望连续列组处理原始数据帧中的许

假设我的示例数据如下所示

   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")
问题是缺少第4级。我希望连续列组处理原始数据帧中的许多重复值。感谢您的帮助


谢谢

假设'freq'按降序排列,我们得到'freq'的
唯一的
元素,用
选择前3个元素,使用
%in%
获得那些元素在'freq'列中的逻辑索引,以及
子集

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

如果我们使用的是
rank
,那么
dplyr
中的
densite\u-rank
将是一个选项

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

假设'freq'按降序排列,我们得到'freq'的
唯一的
元素,用
选择前3个元素,使用
%in%
获得'freq'列中那些元素的逻辑索引,以及
子集

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

如果我们使用的是
rank
,那么
dplyr
中的
densite\u-rank
将是一个选项

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

下面是另一种基本的R方法:

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

下面是另一种基本的R方法:

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