按其他数据框的列名排序,并在长度上匹配

时间:2017-04-02 06:52:53

标签: r row identity-column

例如,您有这个数据框:

dd <- data.frame(b = c("cpg1", "cpg2", "cpg3", "cpg4"), 
                  x = c("A", "D", "A", "C"), y = c(8, 3, 9, 9),
                 z = c(1, 1, 1, 2))
dd
     b x y z
1 cpg1 A 8 1
2 cpg2 D 3 1
3 cpg3 A 9 1
4 cpg4 C 9 2

我想在另一个数据框中按行排序列名(b,x,y,z):

d <- data.frame(pos = c("x", "z", "b"), 
                 g = c("A", "D", "A"), h = c(8, 3, 9))
d
  pos g h
1   x A 8
2   z D 3
3   b A 9

所以我想用行d $ pos命令dd的列名,dd也需要在d $ pos行中具有相同的数字。

我试过订单和匹配,但它没有给我需要的结果。我的数据集非常大,所以自动化是理想的。

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

我们可以执行match然后订购列

i1 <- match(d$pos, names(dd), nomatch = 0)
dd[i1]
#  x z    b
#1 A 1 cpg1
#2 D 1 cpg2
#3 A 1 cpg3
#4 C 2 cpg4

或者,如果我们只想要基于'd $ pos'

的列
dd[as.character(d$pos)]
#  x z    b
#1 A 1 cpg1
#2 D 1 cpg2
#3 A 1 cpg3
#4 C 2 cpg4