【问题标题】:Merge by row index and column label [duplicate]按行索引和列标签合并[重复]
【发布时间】:2018-11-02 21:56:33
【问题描述】:
> df1
   x  y
1 13  7
2 14  8
4 16 10
5 17 11
6 18 12


> df2
  index_df1 y
1         2 a
2         4 d
3         5 e
4         6 f

如何将df1df2df1 的索引和df2"index_df1" 列合并。喜欢:

z <- merge(df1, df2, by.x = 0, by.y = "index_df1", all.x = TRUE)

【问题讨论】:

  • 添加行名作为列,然后像往常一样合并,上面@CPak提供的链接。

标签: r dataframe indexing merge


【解决方案1】:

您可以使用dplyr::left_join将两个data.frames合并为:

library(dplyr)

df1 %>% mutate(rn = row_number()) %>%
  left_join(df2, by = c("rn" = "index_df1")) %>%
  select(-rn)

#    x y.x  y.y
# 1 13   7 <NA>
# 2 14   8    a
# 3 15   9 <NA>
# 4 16  10    d
# 5 17  11    e
# 6 18  12    f

更新:基于 OP 的反馈。如果 df1 中的行不是连续的,那么选项可能是:

# Use `index_df1` to add a column having value of x in df1
df2$x <- df1[df2$index_df1,"x"]

# Now, merge
merge(df1, df2[,c("y", "x")], by.x = "x", by.y = "x", all.x = TRUE)
#    x y.x  y.y
# 1 13   7 <NA>
# 2 14   8    a
# 3 15   9 <NA>
# 4 16  10    d
# 5 17  11    e
# 6 18  12    f

【讨论】:

  • 我忘了补充 df1 中的索引不是连续的,因为我删除了上面的一些行。
  • 我们为什么要使用 full_join?
  • @zx8754 好点。我应该使用left_join 作为OP 打算你使用all.x = TRUE
  • @Chris 然后可以在df2 中添加一列为df2$x &lt;- df1[df2$index_df1,"x"],然后合并df1df2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 2010-09-16
相关资源
最近更新 更多