如何在保持R中另一列的顺序的同时对一列进行排序?

如何在保持R中另一列的顺序的同时对一列进行排序?,r,sorting,R,Sorting,我希望对一列进行排序,同时保持R中另一列的顺序。例如,我在“sales”的数据集中有“year”和“region”变量: 年份区域 2006 1 2006 101 2006 107 2006 11 2006 13 2007 1 2007 101 2007 107 2007 11 2007 13 我想要的是对每个区域的“年”变量有一个升序,同时保持“区域”的顺序,既不是升序也不是降序 年份区域 2006 1 2

我希望对一列进行排序,同时保持R中另一列的顺序。例如,我在“sales”的数据集中有“year”和“region”变量:

年份区域
2006     1 
2006   101 
2006   107 
2006    11 
2006    13 
2007     1 
2007   101 
2007   107 
2007    11 
2007    13 
我想要的是对每个区域的“年”变量有一个升序,同时保持“区域”的顺序,既不是升序也不是降序

年份区域
2006     1 
2007     1 
2006   101 
2007   101 
2006   107 
2007   107 
2006    11 
2007    11 
2006    13 
2007    13 
我试图使用
顺序
排列
函数,但它们没有给出我想要的结果。有人能帮我吗?

试试这个:

library(dplyr)
df %>% arrange(factor(region, as.character(unique(region))), year)
我们将
区域
重新定义为一个
因子
,从而确定其顺序。新的
系数
区域将在
排列
操作完成后立即删除

输出:

# A tibble: 10 x 2
    year region
   <dbl>  <dbl>
 1  2006      1
 2  2007      1
 3  2006    101
 4  2007    101
 5  2006    107
 6  2007    107
 7  2006     11
 8  2007     11
 9  2006     13
10  2007     13
在base R中,您可以执行以下操作:

df[订单(因子(df$地区,级别=唯一(df$地区)),df$年份),]
#>年份区域
#> 1  2006      1
#> 6  2007      1
#> 2  2006    101
#> 7  2007    101
#> 3  2006    107
#> 8  2007    107
#> 4  2006     11
#> 9  2007     11
#> 5  2006     13
#> 10 2007     13

由(v0.3.0)于2020-10-19创建的另一个选项是
match
with
arrange

library(dplyr)
df %>%
    arrange(match(region, unique(region)), year) 
-输出

#    year region
#1  2006      1
#2  2007      1
#3  2006    101
#4  2007    101
#5  2006    107
#6  2007    107
#7  2006     11
#8  2007     11
#9  2006     13
#10 2007     13
数据
df这应该可以:

library(dplyr)

dat <- data.frame(year = c(2006,2007,2006,2007,2006,2007,2006,2007,2006,2007),
                  region=c(1,1,101,101,107,107,11,11,13,13)
                  )

dat %>% arrange(year)
库(dplyr)
安排的日期百分比(年)
Read。寻找各种“稳定”的
method=
选项,这意味着领带的顺序得到了保留(这正是您所要求的)。值得注意的是,
“快速”
是不稳定的,
“基数”
是稳定的,
“外壳”
可能是稳定的,
“自动”
根据一些启发式进行选择。第一个文档说明,除非
method=“quick”
,否则
order
始终是稳定的,因此使用
dat[order(dat$region),]
应该是安全的。
df <- structure(list(year = c(2006L, 2006L, 2006L, 2006L, 2006L, 2007L, 
2007L, 2007L, 2007L, 2007L), region = c(1L, 101L, 107L, 11L, 
13L, 1L, 101L, 107L, 11L, 13L)), class = "data.frame", row.names = c(NA, 
-10L))
library(dplyr)

dat <- data.frame(year = c(2006,2007,2006,2007,2006,2007,2006,2007,2006,2007),
                  region=c(1,1,101,101,107,107,11,11,13,13)
                  )

dat %>% arrange(year)