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)