[英]Sorting a factor column in R dataframe according to another factor column
I have a dataframe in R as given below我在 R 中有一个 dataframe 如下所示
jj <- c("an","al","ak","cj","bd","bi","bj","bn","bl")
jk <- as.factor(c( 1,1,1,0,0,0,2,2,2))
jn <- as.factor(c(2,0,1,1,0,0,3,1,1))
df <- data.frame(jj,jk,jn)
df
jj jk jn
1 an 1 2
2 al 1 0
3 ak 1 1
4 cj 0 1
5 bd 0 0
6 bi 0 0
7 bj 2 3
8 bn 2 1
9 bl 2 1
I want to sort it in a way as given below,我想按照下面给出的方式对其进行排序,
jj jk jn
1 an 0 0
2 al 0 1
3 ak 0 2
4 cj 1 0
5 bd 1 0
6 bi 1 1
7 bj 2 1
8 bn 2 1
9 bl 2 3
I tried the code given below to sort the dataframe我尝试了下面给出的代码对 dataframe 进行排序
> with(df, df[order(jk, jj, jn),])
jj jk jn
5 bd 0 0
6 bi 0 0
4 cj 0 1
3 ak 1 1
2 al 1 0
1 an 1 2
7 bj 2 3
9 bl 2 1
8 bn 2 1
The above code sorts the dataframe according to the second column but I am not getting how to sort the third column in a way as shown above like the third column should be sorted according to each level of levels(df$jk) .上面的代码根据第二列对 dataframe 进行排序,但我不知道如何以如上所示的方式对第三列进行排序,就像第三列应该根据每个级别进行排序一样(df$jk) 。
Based on the comments and your expected output, try this.根据评论和您预期的 output,试试这个。 It is not entirely clear this is what you wanted.目前尚不完全清楚这是您想要的。
library(dplyr)
df %>%
mutate(jk = sort(jk)) %>%
group_by(jk) %>%
mutate(jn = sort(jn))
# Groups: jk [3]
jj jk jn
<fct> <fct> <fct>
1 an 0 0
2 al 0 1
3 ak 0 2
4 cj 1 0
5 bd 1 0
6 bi 1 1
7 bj 2 1
8 bn 2 1
9 bl 2 3
base R底座 R
df$jk_1 <- sort(df$jk)
df$jn_1 <- ave(df$jn, df$jk, FUN = sort)
jj jk jn jk_1 jn_1
1 an 1 2 0 0
2 al 1 0 0 1
3 ak 1 1 0 2
4 cj 0 1 1 0
5 bd 0 0 1 0
6 bi 0 0 1 1
7 bj 2 3 2 1
8 bn 2 1 2 1
9 bl 2 1 2 3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.