我想找到数据集中的前10个值,并且我认为使用表格是做到这一点的最佳方法?但我确定并愿意接受其他建议!然后,我想用它来过滤/细分我的数据框,使其仅包括这前10个值。
我的数据框的示例如下: (例如,如果我想找到前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
因此,我将对数据进行子集化以提供以下数据集:
ID col
A blue
A purple
A green
C red
C blue
C yellow
C orange
谢谢!
答案 0 :(得分:3)
您可以尝试使用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)
答案 1 :(得分:2)
我们可以使用table
,按sort
顺序decreasing
计算值的数量,然后选择前2个(或10个)值,获得对应的ID
并从数据帧中将那些ID
的子集。
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
答案 2 :(得分:1)
使用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
(我们使用花括号,因为我们不将左侧结果作为过滤器的第一个参数)