2

我在弄清楚如何做到这一点时遇到了一些麻烦。

我想按包含与列表中的因子相同的因子的列对数据框进行排序。重要的是代码不会更改每个因素中行的顺序。

想法?

编辑:

salmon <- c("red", 3,7, 5)
bass <- c("red", 1,3,5)
shrimp <- c("blue", 1, 4, 2)
carp <- c("orange", 6, 6, 6)

dfex <- data.frame(salmon, bass, shrimp, carp)
dfex <- data.frame(t(dfex))

ordering <- c("blue", "orange", "red")

所以这里的想法是使用排序向量重新排序数据帧

4

2 回答 2

10

match()order()应该做的组合。

dfex[order(match(dfex[[1]], ordering)), ]

match()将告诉您第一列中每个值的索引位置,如ordering. 并且按这些位置排序将产生与 的顺序相匹配的顺序ordering

于 2013-10-08T13:13:18.747 回答
6

首先,构建数据框的方式有点复杂。您可以改为执行以下操作:

dfex <- data.frame(v1=c("salmon","shrimp","carp"),
                   v2=c("red","blue","orange"),
                   v3=c(3,1,6),
                   v4=c(7,4,6),
                   v5=c(5,2,6))

然后,您可以使用行名称对数据框进行排序:

order <- c("blue", "orange", "red")
rownames(dfex) <- dfex$v2
dfex[order,]     

这使 :

           v1     v2 v3 v4 v5
blue   shrimp   blue  1  4  2
orange   carp orange  6  6  6
red    salmon    red  3  7  5
于 2013-10-08T13:02:33.793 回答