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