首页 > 解决方案 > 在数据框中按组对行进行排序、排序或排名

问题描述

我有以下df

> df

A   1
B   2
B   2
C   1
D   2
D   2
E   1
F   2
F   2

df = data.frame(Letters = LETTERS[1:6], Times = rep(c(1,2)), stringsAsFactors = FALSE) df = df[rep(seq_len(nrow(df)), df$Times),]

但我想reorder// sortrank不确定使用什么)我的行如下:

> df

B   2
B   2
A   1
D   2
D   2
C   1
F   2
F   2
E   1

我找到了关于 SO 的类似但不同的问题的答案。尽管如此,他们似乎都没有解决我的问题。

有没有办法这样做BaseR

标签: rdataframerows

解决方案


不确定这是否符合您的逻辑,但确实符合预期的输出,

library(dplyr)

df %>% 
 arrange(desc(Letters)) %>% 
 arrange(desc(cumsum(c(0, diff(Times) == 1))))

#  Letters Times
#1       B     2
#2       B     2
#3       A     1
#4       D     2
#5       D     2
#6       C     1
#7       F     2
#8       F     2
#9       E     1

推荐阅读