我有一个第一个看起来像这样的数据框:
DF1
a d c b Name1 1 1 -1 -1 Name2 -1 2 -3 1 Name3 1 2 -1 0 Name4 9 0 1 -10
和第二个包含DF1列名的data.frame。换句话说,它看起来像:
DF2
一个
d
ç
B'/ P>
我想按顺序(按递减顺序)命令DF1:首先DF2 == a,然后根据DF2 == c,然后根据DF2 == d依此类推。 在实际情况中,DF2由大约1000个元素以及DF1的列组成,DF2的每个元素将与DF1列匹配。 所需的输出将是:
为DF2 [1,]
排序后[[1]]
a d c b Name1 9 0 -1 -10 Name2 1 1 -3 1 Name3 1 2 -1 0 Name4 -1 2 -3 1
为DF2 [2,]
排序后[[2]]
a d c b Name1 -1 2 -3 1 Name2 1 2 -1 0 Name3 1 1 -1 -1 Name4 9 0 1 -10
等等。
答案 0 :(得分:2)
在澄清问题后编辑:
DF1 <- read.table(text="a d c b
Name1 1 1 -1 -1
Name2 -1 2 -3 1
Name3 1 2 -1 0
Name4 9 0 1 -10 ", header=TRUE)
DF2 <- data.frame(cols=c("a", "c", "d", "b"))
lapply(as.list(DF2$cols),
function(x,df) df[order(df[,x], decreasing=TRUE),],
df=DF1)
# [[1]]
# a d c b
# Name4 9 0 1 -10
# Name1 1 1 -1 -1
# Name3 1 2 -1 0
# Name2 -1 2 -3 1
#
# [[2]]
# a d c b
# Name4 9 0 1 -10
# Name1 1 1 -1 -1
# Name3 1 2 -1 0
# Name2 -1 2 -3 1
#
# [[3]]
# a d c b
# Name2 -1 2 -3 1
# Name3 1 2 -1 0
# Name1 1 1 -1 -1
# Name4 9 0 1 -10
#
# [[4]]
# a d c b
# Name2 -1 2 -3 1
# Name3 1 2 -1 0
# Name1 1 1 -1 -1
# Name4 9 0 1 -10
答案 1 :(得分:0)
我认为你会这样:
DF[Reduce(order,DF),]
a d c b
Name2 -1 2 -3 1
Name1 1 1 -1 -1
Name3 1 2 -1 0
Name4 9 0 1 -10