重新排序R data.frame的子集,同时修改行名称

Jan*_*ary 8 r dataframe

给定data.frame:

foo <- data.frame(ID=1:10, x=1:10)
rownames(foo) <- LETTERS[1:10]
Run Code Online (Sandbox Code Playgroud)

我想重新排序由行名称定义的行的子集.但是,我想交换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)]
Run Code Online (Sandbox Code Playgroud)

但这很漫长而复杂.有更简单的方法吗?

Ron*_*hah 6

我们可以用反向替换sel值.rownamessel

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
Run Code Online (Sandbox Code Playgroud)