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

时间:2015-03-10 14:09:32

标签: r dataframe data.table

我有几个数据框,两个中的一些行名相同。我想从第一个数据帧复制第二个数据框中存在的所有行名称的列。第一个数据框(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应该有一个快捷方式。

2 个答案:

答案 0 :(得分:3)

data.table对象不保留行名称(虽然它将其存储为属性)但您可以使用data.table转换为keep.rownames = TRUE时将行名称转换为其他列然后,在键入之后,您可以使用二进制连接加入数据集,同时通过引用更新df2(类似于@eddies链接)

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

答案 1 :(得分:1)

尝试match()

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