根据索引将列从一个 data.frame 复制到另一个

Copy column from one data.frame to another based on index

问题与

中的问题类似

我正在尝试将一列从 df2(大 df)复制到 df1(小 df),但基于索引。 在 python 中它将是:

df1= df1[df.index.isin(df2.index)]
df1['columnx'] = df2['columny']

df1$name <- 0
df1$name[df1$df1['columnx'] == df2$['columny'] <- df2$name

我试图用 df2 中对应于公共索引(columnx \ columny as index col)的“name”列的值替换 df1 中的“name”列,但失败了。我也试图找到一个共同的索引

df2.index <- intersect(df1$columnx, df2$columny)

因此 df2 将具有与 df1 中一样的小索引,然后将列从 df2 复制到 df1,但它不起作用

编辑:

DF1

   columnx   |     col.1     |    col.2   |...
       a     |      12345    |   etc.     |...
       b     |               |            |

DF2

columny   | col.1  | col.2  | name|
a         | 123    | 1234   |abc  |
b         |        |        |def  |
c         |        |        |ghi  | 
d         |        |        |     |
..

需要的结果:

DF 合并:

   columnx   |     col.1     |    col.2   |name
       a     |      12345    |   etc.     |abc  |
       b     |               |            |def  |

您可以简单地使用 match():

df1$name <- df2$name[match(df1$columnx, df2$columny)]

或按公共列合并两个数据:

dplyr::left_join(df1, df2[c("columny", "name")], by = c("columnx" = "columny"))