我有一个个人的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
答案 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