9

我想制作一个简单的表格,展示我的数据集中给定变量的最大 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 上排序。所有数据都包含在同一个数据框中。

4

5 回答 5

15

这个应该做...

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

data <- data[1:10,]

于 2015-08-11T10:52:19.387 回答
12

您可以使用arrangefrom执行此操作dplyr。如果有分组变量,这也应该起作用。只需group_byarrange. 我们使用 过滤前 10 个观察值slice

 library(dplyr)
 df1 %>%
    arrange(desc(Score)) %>%
    slice(1:10) 

或者另一个选项是?top_n(由@docendodiscimus 评论),dplyr它是一个包装器,它使用filtermin_rank选择前n 个(即10 个)条目作为'Score'。

 top_n(df1, 10, Score)    

或者我们filter通过创建一个row_number相当于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”变量,并选择前 10 个观察值。 .SD意味着Subset of DataTable

 library(data.table)
 setDT(df1)[order(-Score), .SD[1:10]]
于 2015-08-11T10:53:09.480 回答
2

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

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
于 2015-08-11T11:11:43.013 回答
1

使用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
于 2015-08-11T16:00:19.680 回答
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

默认情况下,如果您想忽略 tie 并严格返回n行,则选择带有 tie 的行,请使用with_ties = FALSE.

于 2021-09-21T05:56:41.297 回答