在R的表格中查找前10个值

时间:2018-08-13 09:18:26

标签: r filter subset top-n

我想找到数据集中的前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

谢谢!

3 个答案:

答案 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

(我们使用花括号,因为我们不将左侧结果作为过滤器的第一个参数)