添加一个新列,其排序顺序按列分组,但按原始排序顺序

问题描述 投票:0回答:1

我有一个数据集,我想以某种方式排序,我需要它按

CENTER
进行分组 但除此之外,记录必须保持与原始数据集相同的排序顺序。所以 VUMC 是第一,KUL 是第二,所以应该保持相同的顺序。

诚然,我在 R 方面没有那么丰富的经验,但在 SQL(我在这里不能使用)中,我只需执行

DENSE_RANK
即可获得所需的结果。在 R 中,有一个基本的
rank
函数,dplyr 库有一个
dense_rank
函数,但由于某种原因我无法让它工作。

这是我尝试过的代码

df_results <- read.table(text = "
CENTER;FILE;HB;LineNr
VUMC;NPUT_00172.MRC;12.7;1
VUMC;PHYM_00577.MRC;11.9;2
VUMC;CPNU_00625.MRC;9.2;3
KUL;UYTC_00146.MRC;10.8;4
KUL;UKFA_00766.MRC;10.7;5
LOR;RFAF_00105.MRC;12.9;6
LOR;ARFW_00961.MRC;12.4;7
KUL;HMCU_00630.MRC;8.6;8
VUMC;FPRB_00509.MRC;10.8;9
LOR;TWUA_00651.MRC;10.6;10
", header = TRUE, sep = ";", na.strings = "")

library(dplyr)

df_results <- df_results %>%
  group_by(CENTER) %>%
  mutate(min_LineNr = min(LineNr),
     dense_linenr = rank(min_LineNr),
     NewSortOrder = (dense_linenr*1000 + LineNr) )
     

min(LineNr)
部分按预期工作,但
rank
导致
2.0
2.5
,我无法完全解释。 我也尝试过将
mutate(rank..)
作为单独的声明,但这没有任何区别。 我也尝试过
dense_rank
,这只会导致新专栏的所有
1
,这又不是我所期望的。

中心 文件 HB 线路编号 min_LineNr dense_linenr 新排序顺序
VUMC NPUT_00172.MRC 12.7 1 1 2.5 2501
VUMC PHYM_00577.MRC 11.9 2 1 2.5 2502
VUMC CPNU_00625.MRC 9.2 3 1 2.5 2503
库尔 UYTC_00146.MRC 10.8 4 4 2 2004年
库尔 UKFA_00766.MRC 10.7 5 4 2 2005
劳尔 RFAF_00105.MRC 12.9 6 6 2 2006年
劳尔 ARFW_00961.MRC 12.4 7 6 2 2007年
库尔 HMCU_00630.MRC 8.6 8 4 2 2008
VUMC FPRB_00509.MRC 10.8 9 1 2.5 2509
劳尔 TWUA_00651.MRC 10.6 10 6 2 2010

理想的结果应如下表所示,因此 NewSortOrder 包含按

CENTER
分组的排序顺序,但在这些中心内,它按原始行顺序排序。

中心 文件 HB 线路编号 新排序顺序
VUMC NPUT_00172.MRC 12.7 1 1001
VUMC PHYM_00577.MRC 11.9 2 1002
VUMC CPNU_00625.MRC 9.2 3 1003
VUMC FPRB_00509.MRC 10.8 9 1004
库尔 UYTC_00146.MRC 10.8 4 2001
库尔 UKFA_00766.MRC 10.7 5 2002
库尔 HMCU_00630.MRC 8.6 8 2003
劳尔 RFAF_00105.MRC 12.9 6 3001
劳尔 ARFW_00961.MRC 12.4 7 3002
劳尔 TWUA_00651.MRC 10.6 10 3003

我的问题是: 为什么

rank
dense_rank
会给出这些奇怪的结果?可以这么说,为什么它不按照罐头上所说的那样做呢? 哪种 R 代码或库是获得所需结果列的最直接方法?

r grouping rank
1个回答
0
投票

arrange()
将是对 data.frame 的行进行排序的所需方法。它按字母顺序排列文本值,但您可以通过将列更改为具有按自然顺序排列的级别的因子来更改此行为,如下所示:

df_results %>%
    arrange(factor(CENTER,levels=unique(CENTER)))

产品:

   CENTER           FILE   HB LineNr
1    VUMC NPUT_00172.MRC 12.7      1
2    VUMC PHYM_00577.MRC 11.9      2
3    VUMC CPNU_00625.MRC  9.2      3
4    VUMC FPRB_00509.MRC 10.8      9
5     KUL UYTC_00146.MRC 10.8      4
6     KUL UKFA_00766.MRC 10.7      5
7     KUL HMCU_00630.MRC  8.6      8
8     LOR RFAF_00105.MRC 12.9      6
9     LOR ARFW_00961.MRC 12.4      7
10    LOR TWUA_00651.MRC 10.6     10
© www.soinside.com 2019 - 2024. All rights reserved.