给定一个data.frame:

foo <- data.frame(ID=1:10, x=1:10)
rownames(foo) <- LETTERS[1:10]

我想对行的子集重新排序,这些行由它们的行名定义。但是,我也想交换foo的行名。我可以
sel <- c("D", "H") # rows to reorder
foo[sel,] <- foo[rev(sel),]
sel.wh <- match(sel, rownames(foo))
rownames(foo)[sel.wh] <- rownames(foo)[rev(sel.wh)]

但这是漫长而复杂的。有没有更简单的方法?

最佳答案

我们可以将sel中的rownames值替换为sel的相反值。

x <- rownames(foo)
foo[replace(x, x %in% sel, rev(sel)), ]

#  ID  x
#A  1  1
#B  2  2
#C  3  3
#H  8  8
#E  5  5
#F  6  6
#G  7  7
#D  4  4
#I  9  9
#J 10 10

关于重新排序R data.frame的子集,同时修改行名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43252184/

10-12 17:22