R 有没有一种方法可以将所有的obs条件保持在另一列的top\n值上

R 有没有一种方法可以将所有的obs条件保持在另一列的top\n值上,r,dplyr,tidyverse,rscript,top-n,R,Dplyr,Tidyverse,Rscript,Top N,我需要找到一种使用tidyverse保存所有OB的方法。但从列中过滤除顶部值以外的所有其他观察值 例如: Name| title | rank John| xxxxxx | 1 John| yyyyyyy | 1 John| zzzzzz | 1 max | xxxxxx | 3 max | yyyyyyy | 3 max | zzzzzz | 3 evan| xxxxxx | 2 evan| yyyyyyy | 2 evan

我需要找到一种使用tidyverse保存所有OB的方法。但从列中过滤除顶部值以外的所有其他观察值

例如:

Name| title      | rank
John| xxxxxx     | 1
John| yyyyyyy    | 1
John| zzzzzz     | 1
max | xxxxxx     | 3
max | yyyyyyy    | 3
max | zzzzzz     | 3
evan| xxxxxx     | 2 
evan| yyyyyyy    | 2
evan| zzzzzz     | 2
然后我想保持top_n rank=2,并且仍然保持对该秩的所有观察,所以不只是取消行

看起来是这样的

Name| title      | value
John| xxxxxx     | 100
John| yyyyyyy    | 100
John| zzzzzz     | 100
evan| xxxxxx     | 200 
evan| yyyyyyy    | 200
evan| zzzzzz     | 200

在dplyr/with tidyverse中是否可能这样做?

如果您事先不知道排名(例如,您的数据如下所示),您可以
在组上嵌套
,使用
slice\u min
,然后
取消嵌套
。但是嵌套和取消测试在大数据上会变得很慢

库(tidyverse)
df%
嵌套(数据=c(标题))%>%
切片最小值(order\U by=value,带系数=TRUE,n=2)%>%
unnest(cols=c(数据))
#>#tibble:6 x 3
#>名称值标题
#>       
#>1约翰100 xxxxxx
#>2约翰100年
#>3约翰100 zzzz
#>4埃文200 xxxxxx
#>5 evan 200 YYYYYY
#>6埃文200 zzzz
如果您的数据确实如此简单,那么AnilGoyal的解决方案是最好的:

库(tidyverse)
df%过滤器(等级<3)
#>#tibble:6 x 3
#>名衔
#>       
#>1约翰xxxxxx 1
#>2约翰·YYYY 1
#>3约翰ZZZZZZZZZZZZZ1
#>4埃文xxxxxx 2
#>5埃文YYYY 2
#>6埃文ZZZZZZZZ2

由(v1.0.0)创建于2021-04-22我真的不理解你的问题。这个“值”从何而来?+在上面的评论中,我想补充一下为什么不过滤
rank?我认为AnilGoyal的评论就是这个问题的解决方案。