根据另一个重命名 df 中的行,并在 R 中排序



你好,我有 2 个数据帧

DF1

COL1 COL2 COLX
SEQ6 A 1
SEQ2 B 2
SEQ4 C 3
SEQ1 D 4
SEQ7 D 5

DF2

COL1 COL3
SEQ1 Q
SEQ2 L
SEQ3 O
SEQ4 O
SEQ5 M
SEQ6 L
SEQ7 Y
SEQ8 G

这个想法是根据DF2中的行名更改DF1的行名。然后以与DF2相同的方式对行名进行排序

预期结果将是:

COL1 COL2 COLX
SEQ1 D 4
SEQ2 B 2
SEQ3 NA NA
SEQ4 C 1
SEQ5 NA NA
SEQ6 A 1
SEQ7 D 5
SEQ8 NA NA

谢谢你的帮助

你可以使用基数中的match,如下所示:

DF2$COL2 <- DF1$COL2[match(DF2$COL1, DF1$COL1)]
DF2[-2]
#  COL1 COL2
#1 SEQ1    D
#2 SEQ2    B
#3 SEQ3 <NA>
#4 SEQ4    C
#5 SEQ5 <NA>
#6 SEQ6    A
#7 SEQ7    D
#8 SEQ8 <NA>

如果您有更多列:

cbind(DF2, DF1[match(DF2$COL1, DF1$COL1),])
#     COL1 COL3 COL2 COL1 COL2
#4    SEQ1    Q    D SEQ1    D
#2    SEQ2    L    B SEQ2    B
#NA   SEQ3    O <NA> <NA> <NA>
#3    SEQ4    O    C SEQ4    C
#NA.1 SEQ5    M <NA> <NA> <NA>
#1    SEQ6    L    A SEQ6    A
#5    SEQ7    Y    D SEQ7    D
#NA.2 SEQ8    G <NA> <NA> <NA>

数据:

DF1 <- read.table(header=TRUE, text="COL1 COL2
SEQ6 A
SEQ2 B
SEQ4 C
SEQ1 D
SEQ7 D")
DF2 <- read.table(header=TRUE, text="COL1 COL3
SEQ1 Q
SEQ2 L
SEQ3 O
SEQ4 O
SEQ5 M
SEQ6 L
SEQ7 Y
SEQ8 G")

相关内容

最新更新