在 R 中:使用自定义向量对具有非唯一值的数据框进行排序

In R: sort data frame with non-unique values using custom vectors

如果给定这个数据框:

df <- 
  data.frame(
    v1=c("a","b","c","a"),
    v2=c("z", "x", "x", "y"),
    v3=c(1,2,3,4),
    v4=factor(c("id1", "id2", "id3", "id4")))

> df
  v1 v2 v3  v4
1  a  z  1 id1
2  b  x  2 id2
3  c  x  3 id3
4  a  y  4 id4

可以用

v1后的数据进行排序
df[order(df$v1),]
  v1 v2 v3  v4
1  a  z  1 id1
4  a  y  4 id4
2  b  x  2 id2
3  c  x  3 id3

并由一级(v1)二级(v2)(结缘):

df[order(df$v1, df$v2),]
  v1 v2 v3  v4
4  a  y  4 id4
1  a  z  1 id1
2  b  x  2 id2
3  c  x  3 id3

如果你想按自定义排序 - 而不是按字母顺序或数字 - 向量 s 我只知道使用 match() 并且只有在只有唯一值时才有效:

要求(dplyr)

s <- c("b","c","a")
df %>%
  distinct(v1) %>%
  .[match(s,df$v1),]

  v1 v2 v3  v4
2  b  x  2 id2
3  c  x  3 id3
1  a  z  1 id1

所以我的问题是:

您如何才能 1) 通过像 s 这样的自定义向量对具有非唯一值的数据框进行排序,以及 2) 如何包含辅助排序向量以解决关系?

您可以对匹配结果进行排序:

df[order(match( df$v1, s), df$v2),]

#   v1 v2 v3  v4
# 2  b  x  2 id2
# 3  c  x  3 id3
# 4  a  y  4 id4
# 1  a  z  1 id1