如何根据另一个数据框中的row.names来订购data.frame?

Csa*_*abo 2 sorting r dataframe

基本上,我有一个初始data.frame,我使用参与者的名字作为row.names.由于各种原因,我不得不堆叠,然后以长格式合并数据,然后基于因子变量,我只选择了一部分数据.然后我聚合了这个,所以我再次获得广泛的数据,参与者为row.names.但是,顺序不一样.因此,如果我想要cbind使用新数据的原始宽数据,它将使我的数据混乱,因为顺序row.names是不同的.我试过sort(),order(),transform()和读几个问题,但我找不到这样做的一种方式.

DF1
>               V1           V2           V3
>     AAA        24           22           37
>     BBB        21           22           33
>     CCC        30           32           38
>     DDD        21           23           35
Run Code Online (Sandbox Code Playgroud)

另一个数据框具有相同的dim()但不同的row.names顺序.

DF2 row.names
>      BBB
>      CCC
>      AAA
>      DDD
Run Code Online (Sandbox Code Playgroud)

我想DF1基于rownames(DF2)变量进行排序,以便变量与rownames保持一致,因此我可以cbind (D1, D2)因为rownames相同,所以同一个变量将属于同一个参与者.我可能过于复杂了,抱歉:)

基本上,我想data.frame(DF1)基于rownames 重新排序整个DF2.

我知道这是一个蹩脚的问题,但我找不到合适的答案.

eip*_*i10 10

这是一个选项,使用内置mtcars数据框进行说明:

# Create new sorted data frame. This is analogous to the second data frame
# by which you want to sort the first one.
mtcars.sorted = mtcars[order(rownames(mtcars)),]

# Sort original data frame by the order of the new data frame
mtcars[match(rownames(mtcars.sorted), rownames(mtcars)),]
Run Code Online (Sandbox Code Playgroud)

因此,在您的情况下,代码将是:

DF1[match(rownames(DF2), rownames(DF1)), ]
Run Code Online (Sandbox Code Playgroud)