我有一个看起来像这样的数据框
aa bb cc
-------------
1 aa 1
1 dd 10
2 bb 11
2 cc 20
3 cc 29
3 dd 39
3 aa 33
4 ee 35
4 cc 14
我希望上面的数据框按列排序" bb"我有一个不同的订单作为额外的输入。例如,列" bb"应按照{cc,aa,dd,bb,ff,ee}的顺序排序,但应保留行完整性。
aa bb cc
-------------
1 aa 1
1 dd 10
2 cc 20
2 bb 11
3 cc 20
3 aa 33
3 dd 39
4 cc 14
4 ee 35
R输入代码
d1 <- read.table(header = TRUE, sep = ";", text =
"aa;bb;cc
1;aa;1
1;dd;10
2;cc;20
2;bb;11
3;cc;20
3;aa;33
3;dd;39
4;cc;14
4;ee;35" )
d2 <- c( "cc","aa","dd","bb","ff","ee")
答案 0 :(得分:1)
您可以在这里使用因子的好属性(带标签的数字变量):
#create a factor, level it by d2
d1$bb <- factor(d1$bb, levels=d2)
#order
output <- d1[order(d1$bb2),]
> output
aa bb cc
3 2 cc 20
5 3 cc 20
8 4 cc 14
1 1 aa 1
6 3 aa 33
2 1 dd 10
7 3 dd 39
4 2 bb 11
9 4 ee 35
答案 1 :(得分:1)
d1 <- read.table(header = TRUE, sep = ";", text =
"aa;bb;cc
1;aa;1
1;dd;10
2;cc;20
2;bb;11
3;cc;20
3;aa;33
3;dd;39
4;cc;14
4;ee;35")
library(plyr)
d2 <- ddply(d1, .(aa), function(df){
df$bb <- ordered(df$bb, levels=c( "cc","aa","dd","bb","ff","ee"))
return(df)
})
d2
# aa bb cc
# 1 1 aa 1
# 2 1 dd 10
# 3 2 cc 20
# 4 2 bb 11
# 5 3 cc 20
# 6 3 aa 33
# 7 3 dd 39
# 8 4 cc 14
# 9 4 ee 35