如何在数据框中获取每个组的前10个最高值?

4

我认为这是一个简单的问题,但是我无法解决我的问题。

我有一个数据框,它有9列,我想获取第4列(LumenLength)的每个组中排名最高的3个值。

我想要做到以下几点: a)找到每个SampleID(第一列)的前10个包含第4列最高值的行 b)计算每个SampleID的这10个值的平均值

data frame

我的当前代码a)首先根据SampleID和LumenLength排序值,然后b)分离每个SampleID中最高、次高和第三高的LumenLength值。

sorted.v= arrange(sorted.v, desc(SampleId), LumenLength)
maxlength1 = aggregate(sorted.v$LumenLength,by = list(sorted.v$SampleId),  FUN = tail, n = 1)#highest value
maxlength2 = aggregate(sorted.v$LumenLength,by = list(sorted.v$SampleId),  FUN = tail, n = 2)#second highest value
maxlength3 = aggregate(sorted.v$LumenLength,by = list(sorted.v$SampleId),  FUN = tail, n = 3)#3. highest value

如您所见,我还没有真正达到我的目标。我也相信有更好的方法来做到这一点,但我现在卡住了。


1
在您的描述中,先前提到需要前3名,然后更改为前10名,并计算平均值。预期的输出是什么?另外,请不要将数据集显示为图像。请改用“dput”。 - akrun
1个回答

7
我们可以使用 dplyr 中的 top_n,即使不对数据集进行排序。
sorted.v %>%
    group_by(SampleId) %>%
    top_n(10, LumenLength) %>%
    summmarise(MeanLumenArea = mean(LumenLength))

1
哇,太棒了!非常感谢。 - Carola
我刚刚检查了数据。有时,当最大的10个LumenLength与最大的10个LumenArea数据不相等时,结果将超过10个值。 如果我尝试以下操作,我总是只会得到10个返回值。但是,当我使用LumenLength、LumenWidth等时,结果相当变化,并且似乎主要是按LumenArea排序的....:sorted.v %>% group_by(SampleId) %>% top_n(10, LumenLength) %>% summarise(MeanLumenArea = mean(LumenArea)) - Carola
1
@Carola 你能否更新你的帖子,提供一个可重现的例子和期望的输出,这样我才能检查它。(请使用 dput - akrun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接