按其他数据框的列名排序一行并匹配长度
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
例如你有这个数据框:
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