我很难搞清楚如何做到这一点.
我想通过一个列对数据进行排序,该列包含与列表中的因子相同的因子.重要的是,代码不会改变每个因素中行的顺序.
想法?
编辑:
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")
Run Code Online (Sandbox Code Playgroud)
所以这里的想法是通过使用排序向量重新排序数据帧
的组合match(),并order()应该这样做.
dfex[order(match(dfex[[1]], ordering)), ]
Run Code Online (Sandbox Code Playgroud)
match()将告诉你在第一列中找到的每个值的索引位置ordering.按这些位置排序将产生与订单匹配的订单ordering.
首先,构建数据框的方式有点复杂.您可以执行以下操作:
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))
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用行名称来订购数据框:
order <- c("blue", "orange", "red")
rownames(dfex) <- dfex$v2
dfex[order,]
Run Code Online (Sandbox Code Playgroud)
这使 :
v1 v2 v3 v4 v5
blue shrimp blue 1 4 2
orange carp orange 6 6 6
red salmon red 3 7 5
Run Code Online (Sandbox Code Playgroud)