簡體   English   中英

如何基於r中的數據幀返回2個最高得分和2個最低得分?

[英]how to return 2 highest score and 2 lowest score based on a data frame in r?

我給出了一堆關於得分的數據,我已經將它們組合起來並計算出平均值,還使用dplyr和%>%將它們從最高到最低排列,但是我嘗試不使用而輸出2個最高得分和最低得分任何數字(我的意思是不想使用for循環> <=特定數字)很容易將1設為最高,將1設為最低,但是不知道如何為2做到這一點! 有人能幫我嗎? 謝謝

您可以使用dplyr的top_n()函數。

top_n(your_variable, 2)返回最高的2分, top_n(your_variable, -2)最低的2分。

變量不需要先排序。

https://dplyr.tidyverse.org/reference/top_n.html

library(tidyverse)

# Create an example data set

df <- tribble(~name, ~score,
              'John', 10,
              'Mike', 2,
              'Mary', 11, 
              'Jane', 1,
              'Jill', 5)


df %>% 
  arrange(score)  %>% 
  slice(1:2, nrow(.) - 1:0)

# name  score
# <chr> <dbl>
# 1 Jane      1
# 2 Mike      2
# 3 John     10
# 4 Mary     11

在基數R中,我們可以使用order根據scores對數據進行排序。 要獲得前2名和后2名scores ,我們使用headtail

使用@TonyLadson的數據

inds <- order(df$score)
df[c(head(inds, 2), tail(inds, 2)), ]

#  name  score
#  <chr> <dbl>
#1 Jane      1
#2 Mike      2
#3 John     10
#4 Mary     11

要對數據進行子集處理而無需重新排列並保持相同的順序,我們還可以

df[inds %in% c(1, 2, nrow(df) - 1, nrow(df)), ]

或使用dplyr

library(dplyr)
df %>%
  arrange(score) %>%
  filter(row_number() %in% c(1, 2, n() - 1, n()))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM