问题描述
我有几个数据帧,两者中的某些行名都相同。我想从第一个数据帧中复制第二个数据帧中存在的所有行名的列。第一个数据帧(df1)看起来像是
I have a couple of data frames, some of the row names in both are the same. I want to copy a column from first data frame for all the row names that are present in second data frame. First data frame (df1) looks like
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)看起来像是
and the second data frame (df2) looks like
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。
I want to have variable m1 (df1$m1) for all row names present in second data frame( i.e P001, P003, P005, and P006). If some row names does not exist in df1 (eg P005), it could be replaced with NA or 0.
答案可能是这样的
m1
P001 60.00
P003 29.60
P005 NA
P006 79.30
更长的选择是使用循环,但是我确信R应该有一个捷径。
The longer option would be to use loops but I am sure R should have a shortcut.
推荐答案
data.table
对象不保留行名(尽管它将其存储为属性),但是您可以使用 keep.rownames = TRUE将行名转换为其他列,同时转换为
,然后在键入键之后,可以使用二进制连接并通过引用更新 data.table
df2
来连接数据集(类似于@eddies链接)
data.table
object doesn't keep row names (although it has it stored as an attribute) but you can convert the row names to an additional column while converting to data.table
using keep.rownames = TRUE
and then, after keying, you can join the data sets using the binary join and while updating df2
by reference (similarly to @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
这篇关于将列从另一个数据框中复制到基于另一个数据框中的行名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!