我有个问题
library(dplyr)
problem = data.frame(id = c(1,1,1,2,2,2), var1 = c(5,4,3, 6,5,4), var2 = c(99,12,32,88,9,8))
对于每个id,我只想保留var 1值第二大的行。我尝试了不同的方法(dplyr,base R):
problem %>%
group_by(id) %>%
slice_tail(2, -var1)
problem[with(problem, ave(var1, id, FUN = function(x) x == tail(sort(x), 2)[1])), ]
第一个代码没有;t work,第二个代码给出错误的答案。
我哪里做错了?
4条答案
按热度按时间cyvaqqii1#
n()计算每个组中的行数。slice(n()-1)获取第n-1个元素。注意,这会导致成员少于2个的组出现问题-您可能希望允许这种情况。
fnx2tebb2#
如果你希望使用
slice
,我猜你可以先用slice_max()
去掉最大的两行,然后用slice_tail
去掉最大的一行。也可以使用单个
filter
:输出
3htmauhk3#
如果您有卷,这里是一个
data.table
方法。至于@paul斯塔福德艾伦的评论,你会对只有1人的团队有意见。
bprjcwpo4#
arrange
在desc
上执行"var1"结束后,将slice
与2
一起使用