如果给出了这个数据框:
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)如何包含辅助排序向量以解决关系?
答案 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