R中的子集和排序

数据挖掘 r
2022-03-01 00:32:05

我有一个随机创建的数据框,名为a

  group marks  upd
1     a     2   up
2     b     3   up
3     a     4 down
4     b     5   up
5     a     6 down
6     c     7   up
7     a     8 down

我想只用group='a'和 的降序标记它的子集a我使用了这个查询,但标记没有按降序排列。我的代码有什么错误?

这是我的代码和输出:

> a[a$group=="a" & a$marks[order(a$marks,decreasing=T)],]
  group marks  upd
1     a     2   up
3     a     4 down
5     a     6 down
7     a     8 down

Warning message:
In a$group == "a" & order(a$marks, decreasing = TRUE)[1:3] :
  longer object length is not a multiple of shorter object length
2个回答

a$group=="a"

# [1]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE

a$marks[order(a$marks,decreasing=T)]给出

# [1] 8 7 6 5 4 3 2

将这些与使用逻辑和 ( &) 结合起来在这里没有多大意义。TRUE & 8TRUE- 子集可能会意外工作。但是您只想order查看您的子集,而不是a.

例如尝试

newa <- a[a$group=="a", ] 
newa[order(newa$marks, decreasing = TRUE), ]
#   group marks  upd
# 7     a     8 down
# 5     a     6 down
# 3     a     4 down
# 1     a     2   up

或者,更方便和可读:

library(dplyr)
a %>% filter(group=="a") %>% arrange(desc(marks))

没有 Dplyr,你可以使用

b<- a[a$group=="a",]       
c<- b[b$marks[order(b$marks,decreasing=T),]  

这是因为您指的是顺序b继承自a,并且不能使用列表a的项目的排名来指示b的行应该去哪里。

如果您需要其中的前三个项目,请采取

head(c,3)