Как выбрать ТОП N% индивида в группе с повторными измерениями в г - PullRequest
0 голосов
/ 25 июня 2019

У меня есть 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% лучших животных, основываясь на баллах, и сохранив все показателиТОП 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))

, но не сработал, я выбрал, основываясь только на значении Score, например:

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

Ответы [ 3 ]

1 голос
/ 25 июня 2019

Вы можете использовать:

n <- nrow(data)
head(data[order(data$Score, decreasing = TRUE) , ] , round(n*0.4) )
1 голос
/ 25 июня 2019

При условии, что у каждого животного повторяется один балл, и вы хотите выбрать животных, баллы которых находятся в верхних 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
1 голос
/ 25 июня 2019

Используйте это:

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

Кстати, animals - ваш фрейм данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...