按其他数据框的列名排序一行并匹配长度

order a row by column name of other data frame and match in length

例如你有这个数据框:

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 行中具有相同的编号。

我尝试了顺序和匹配,但没有给我需要的结果。我的数据集很大,所以自动的东西是理想的。

非常感谢您的帮助!

我们可以做一个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