将列从另一个数据框复制到基于来自不同数据框的行名
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
我有几个数据框,其中一些行名是相同的。我想从第一个数据框中为第二个数据框中存在的所有行名称复制一列。第一个数据框 (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