制作一个 table 显示 R 中变量的 10 个最大值?

Make a table showing the 10 largest values of a variable in R?

我想做一个简单的 table 来展示我数据集中给定变量的最大 10 个值,以及每个观察的 4 个其他变量,所以基本上是我数据的一小部分。它看起来像这样:

Score  District  Age  Group  Gender
17     B         23    Red   1
12     A         61    Red   0
11.7   A         18    Blue  0
10     B         18    Red   0
.
.
etc.

据此,数据在 Score var 上排序。所有数据都包含在同一个数据框中。

应该这样做...

data <- data[with(data,order(-Score)),]

data <- data[1:10,]

您可以使用 dplyr 中的 arrange 来完成此操作。如果有分组变量,这也应该有效。只需在 arrange 之前添加 group_by。我们使用 slice.

过滤前 10 个观察值
 library(dplyr)
 df1 %>%
    arrange(desc(Score)) %>%
    slice(1:10) 

或者另一种选择是来自 dplyr?top_n(@docendodiscimus 评论),它是一个使用 filtermin_rank 到 select 的包装器'Score'.

的前 n(即 10)个条目
 top_n(df1, 10, Score)    

或者我们通过使用 row_number 创建逻辑条件来使用 filter,这相当于 rank(ties.method='first')(由@Steven Beaupre 提供)

 filter(df1, row_number(desc(Score)) <= 10)

或者 data.table 选项(@David Arenburg)。我们将 'data.frame' 转换为 'data.table' (setDT(df1)),order(减少)'Score' 变量,以及 select 前 10 个观察值。 .SD 表示 Subset of DataTable.

 library(data.table)
 setDT(df1)[order(-Score), .SD[1:10]]

您可以使用以下代码获取向量的最大值:

my_vec <- c(1:100)
tail(sort(my_vec),10)

因此,如果您想将此方法用作数据框过滤器,您可以这样做:

data(mtcars)
mtcars[mtcars$mpg %in% tail(sort(mtcars$mpg),4),]

这将产生:

> mtcars[mtcars$mpg %in% tail(sort(mtcars$mpg),4),]
                mpg cyl disp  hp drat    wt  qsec vs am gear carb
Fiat 128       32.4   4 78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic    30.4   4 75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla 33.9   4 71.1  65 4.22 1.835 19.90  1  1    4    1
Lotus Europa   30.4   4 95.1 113 3.77 1.513 16.90  1  1    5    2

使用sqldf:

library(sqldf)
sqldf("SELECT * FROM mtcars 
      ORDER BY mpg DESC 
      LIMIT 10", row.names = TRUE)

输出:

               mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Merc 240D      24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Datsun 710     22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Merc 230       22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Toyota Corona  21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1

dplyr >= 1.0.0开始,我们可以使用slice_max功能。

library(dplyr)

mtcars %>% slice_max(mpg, n = 4)

#                mpg cyl disp  hp drat    wt  qsec vs am gear carb
#Toyota Corolla 33.9   4 71.1  65 4.22 1.835 19.90  1  1    4    1
#Fiat 128       32.4   4 78.7  66 4.08 2.200 19.47  1  1    4    1
#Honda Civic    30.4   4 75.7  52 4.93 1.615 18.52  1  1    4    2
#Lotus Europa   30.4   4 95.1 113 3.77 1.513 16.90  1  1    5    2

默认选择有联系的行,如果您想忽略联系并严格 return n 行使用 with_ties = FALSE.