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

时间:2015-03-26 06:52:03

标签: r sorting dataframe match

如果给出了这个数据框:

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)如何包含辅助排序向量以解决关系?

1 个答案:

答案 0 :(得分:1)

您可以订购匹配结果:

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