将列从另一个数据框复制到基于来自不同数据框的行名

Copy column from another data frame to based on row names from a different data frame

我有几个数据框,其中一些行名是相同的。我想从第一个数据框中为第二个数据框中存在的所有行名称复制一列。第一个数据框 (df1) 看起来像

        m1      m2     m3
P001   60.00   2.0     1
P002   14.30   2.077   1
P003   29.60   2.077   1
P004   10.30   2.077   1
P006   79.30   2.077   1
P008    9.16   2.077   1

第二个数据框 (df2) 看起来像

        n1      n2   n3
P001   12.00   2.0   1
P003   17.60   1.7   1
P005   22.30   2.7   1
P006   26.30   1.7   1

我想为第二个数据框中存在的所有行名(即 P001、P003、P005 和 P006)设置变量 m1 (df1$m1)。如果 df1 中不存在某些行名称(例如 P005),则可以将其替换为 NA 或 0。

答案可能是这样的

       m1           
P001   60.00
P003   29.60
P005   NA
P006   79.30 

更长的选择是使用循环,但我相信 R 应该有一个快捷方式。

尝试match():

df2$m1 <- df1$m1[match(row.names(df2), row.names(df1))]

data.table 对象不保留行名称(尽管它已将其存储为属性)但是您可以在使用 [=13] 转换为 data.table 时将行名称转换为附加列=] 然后,在键控之后,您可以使用二进制连接连接数据集,同时通过引用更新 df2 (类似于@eddies link)

setDT(df1, keep.rownames = TRUE)
setkey(setDT(df2, keep.rownames = TRUE), rn)
df2[df1, m1 := i.m1][]
#      rn   n1  n2 n3   m1
# 1: P001 12.0 2.0  1 60.0
# 2: P003 17.6 1.7  1 29.6
# 3: P005 22.3 2.7  1   NA
# 4: P006 26.3 1.7  1 79.3