使用head在R中找到带有关系的前n行

时间:2017-10-27 18:22:30

标签: r

假设我有以下数据框 t1

names <- c('Jack', 'Jill', 'Jane', 'John', 'Job', 'Jim', 'Jason')
pylons <- c(10,5,4,4,3,1,1)

t1 <- data.frame(names,pylons)
t1
head(t1, 5)

但是我想要包含关系的前5行。在这种情况下,有两个4s并列第三名。当我执行 head(t1,5)时,我得到:

1   Jack    10      
2   Jill    5       
3   Jane    4       
4   John    4       
5   Job     3

但我也希望看到吉姆参与这个例子,因为简&amp;约翰并列第三名。

这是否可以使用R?

中的head命令

3 个答案:

答案 0 :(得分:4)

怎么样:

{{1}}

答案 1 :(得分:2)

如果您正在寻找unique功能,那么这可能是一个解决方案。这是数据

names <- c('Jack', 'Jill', 'Jane', 'John', 'Job', 'Jim', 'Jason','Bill')
pylons <- c(10,5,4,4,3,1,1,0)

t1 <- data.frame(names,pylons)
> t1
  names pylons
1  Jack     10
2  Jill      5
3  Jane      4
4  John      4
5   Job      3
6   Jim      1
7 Jason      1
8  Bill      0

然后我们需要按降序知道唯一值

> t1_unique = sort(unique(t1[,'pylons']),decreasing=TRUE)
> t1_unique
[1] 10  5  4  3  1  0

找到前5个匹配的唯一值

> t1[t1[,'pylons'] %in% head(t1_unique,5),]
  names pylons
1  Jack     10
2  Jill      5
3  Jane      4
4  John      4
5   Job      3
6   Jim      1
7 Jason      1

答案 2 :(得分:2)

您还可以考虑使用dplyr::dense_rankfilter

library(dplyr)
t1 %>%
  mutate(grp = dense_rank(pylons)) %>%
  filter(grp <= 5)

  # names pylons grp
# 1  Jack     10   5
# 2  Jill      5   4
# 3  Jane      4   3
# 4  John      4   3
# 5   Job      3   2
# 6   Jim      1   1
# 7 Jason      1   1

已编辑正如评论中所指出

t1 %>%
  mutate(grp = dense_rank(desc(pylons))) %>%
  filter(grp <= 5)

会为您1 thru 5而不是5 thru 1

取消选择grp

t1 %>%
  mutate(grp = dense_rank(pylons)) %>%
  filter(grp <= 5) %>%
  select(-grp)