假设我有以下数据框 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命令答案 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_rank
和filter
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)