在 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
如果给定这个数据框:
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