Select 变量中出现次数最多的 n 个值
Select the n most frequent values in a variable
我想在数据框中的列中找到最常见的值。我假设使用 table
是最好的方法?然后我想 filter/subset 我的数据框只包含这些前 n 个值。
我的数据框示例如下。在这里我想找到例如前 2 个 ID。
ID col
A blue
A purple
A green
B green
B red
C red
C blue
C yellow
C orange
因此我想输出以下内容:
Top 2 values of ID are:
A and C
然后我将 select ID A 和 C 对应的行:
ID col
A blue
A purple
A green
C red
C blue
C yellow
C orange
我们可以使用 table
、sort
顺序 decreasing
和 select 前 2(或 10)个值来计算值的数量,得到相应的 ID
's 并从数据框中对 ID
's 进行子集化。
df[df$ID %in% names(sort(table(df$ID), decreasing = TRUE)[1:2]), ]
# ID col
#1 A blue
#2 A purple
#3 A green
#6 C red
#7 C blue
#8 C yellow
#9 C orange
你可以试试tidyverse
。添加 ID
的计数,然后过滤前两位(使用 < 3
)或前十位(使用 < 11
):
library(tidyverse)
d %>%
add_count(ID) %>%
filter(dense_rank(-n) < 3)
# A tibble: 7 x 3
ID col n
<fct> <fct> <int>
1 A blue 3
2 A purple 3
3 A green 3
4 C red 4
5 C blue 4
6 C yellow 4
7 C orange 4
数据
d <- read.table(text="ID col
A blue
A purple
A green
B green
B red
C red
C blue
C yellow
C orange", header=T)
使用 tidyverse 及其 top_n
:
library(tidyverse)
d %>%
group_by(ID) %>%
summarise(n()) %>%
top_n(2)
Selecting by n()
# A tibble: 2 x 2
ID `n()`
<fct> <int>
1 A 3
2 C 4
完成子集:
d %>%
group_by(ID) %>%
summarise(n()) %>%
top_n(2) %>%
{ filter(d, ID %in% .$ID) }
Selecting by n()
ID col
1 A blue
2 A purple
3 A green
4 C red
5 C blue
6 C yellow
7 C orange
(我们使用大括号是因为我们不将左侧结果作为过滤器的第一个参数)
我想在数据框中的列中找到最常见的值。我假设使用 table
是最好的方法?然后我想 filter/subset 我的数据框只包含这些前 n 个值。
我的数据框示例如下。在这里我想找到例如前 2 个 ID。
ID col
A blue
A purple
A green
B green
B red
C red
C blue
C yellow
C orange
因此我想输出以下内容:
Top 2 values of ID are:
A and C
然后我将 select ID A 和 C 对应的行:
ID col
A blue
A purple
A green
C red
C blue
C yellow
C orange
我们可以使用 table
、sort
顺序 decreasing
和 select 前 2(或 10)个值来计算值的数量,得到相应的 ID
's 并从数据框中对 ID
's 进行子集化。
df[df$ID %in% names(sort(table(df$ID), decreasing = TRUE)[1:2]), ]
# ID col
#1 A blue
#2 A purple
#3 A green
#6 C red
#7 C blue
#8 C yellow
#9 C orange
你可以试试tidyverse
。添加 ID
的计数,然后过滤前两位(使用 < 3
)或前十位(使用 < 11
):
library(tidyverse)
d %>%
add_count(ID) %>%
filter(dense_rank(-n) < 3)
# A tibble: 7 x 3
ID col n
<fct> <fct> <int>
1 A blue 3
2 A purple 3
3 A green 3
4 C red 4
5 C blue 4
6 C yellow 4
7 C orange 4
数据
d <- read.table(text="ID col
A blue
A purple
A green
B green
B red
C red
C blue
C yellow
C orange", header=T)
使用 tidyverse 及其 top_n
:
library(tidyverse)
d %>%
group_by(ID) %>%
summarise(n()) %>%
top_n(2)
Selecting by n()
# A tibble: 2 x 2
ID `n()`
<fct> <int>
1 A 3
2 C 4
完成子集:
d %>%
group_by(ID) %>%
summarise(n()) %>%
top_n(2) %>%
{ filter(d, ID %in% .$ID) }
Selecting by n()
ID col
1 A blue
2 A purple
3 A green
4 C red
5 C blue
6 C yellow
7 C orange
(我们使用大括号是因为我们不将左侧结果作为过滤器的第一个参数)