如何在保持R中另一列的顺序的同时对一列进行排序?
我希望对一列进行排序,同时保持R中另一列的顺序。例如,我在“sales”的数据集中有“year”和“region”变量:如何在保持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
年份区域
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
witharrange
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)