如何在r中重复测量的组中选择TOP N%个个体

时间:2019-06-25 20:15:17

标签: r

我有一个个人的data.frame,像这样:

Animal Score Weight
John     5     4
John     5     3
John     5     3
Peter    3     2
Peter    3     2
Louis    4     2
Louis    4     4
Louis    4     1
Sammy    3     2
Sammy    3     2
Sammy    3     2
John     1     5
John     1     5
John     1     5

我想根据得分选择40%的最佳动物,并保持TOP 40%的所有度量,如下所示:

   Animal Score Weight
    John     5     4
    John     5     3
    John     5     3
    Louis    4     2
    Louis    4     4
    Louis    4     1

我尝试了以下代码:

 top40=subset(df, Score > quantile(Score, prob = 1 - 40/100))

但没有用,我仅根据得分值进行选择,如下所示:

 Animal Score Weight
    John     5     4
    John     5     3
    John     5     3
    Louis    4     2 

3 个答案:

答案 0 :(得分:1)

使用此:

animals %>% 
        filter(
                Score > Score %>% quantile(0.4)
        )

顺便说一句,animals是您的数据框。

答案 1 :(得分:1)

您可以使用:

n <- nrow(data)
head(data[order(data$Score, decreasing = TRUE) , ] , round(n*0.4) )

答案 2 :(得分:1)

假设每只动物都有一个重复的分数,并且您要选择分数在前40%中的动物,则一个选项是

subset(df, Score > quantile(unique(Score), 1 - 40/100))

#    Animal Score Weight
# 1:   John     5      4
# 2:   John     5      3
# 3:   John     5      3
# 4:  Louis     4      2
# 5:  Louis     4      4
# 6:  Louis     4      1

如果您不使用unique(与当前所有其他答案一样),您会得到我认为是出乎意料的结果。如果没有unique,即使分数相同,“得分最高40%”中的动物也会改变,只是因为某些动物的行数更多。

df[c(rep(1, 10), 2:nrow(df)),] %>% 
        filter(
                Score > Score %>% quantile(0.4)
        )
#    Animal Score Weight
# 1    John     5      4
# 2    John     5      4
# 3    John     5      4
# 4    John     5      4
# 5    John     5      4
# 6    John     5      4
# 7    John     5      4
# 8    John     5      4
# 9    John     5      4
# 10   John     5      4
# 11   John     5      3
# 12   John     5      3