首页 > 解决方案 > 在不同的数据框中查找相似的列值,然后创建一个新的数据框

问题描述

之前已经提出过与此类似的问题,但这些问题的解决方案并不完全符合我的目的。假设我有两个不同的数据框:

A <- c("Gene1", "Gene3", "Gene4", "Gene9")
B <- c(-10, -4, 4, 19)
df1 <- data.frame(A, B)
head(df1)

      A   B
1 Gene1 -10
2 Gene3  -4
3 Gene4   4
4 Gene9  19

A <- c("Gene3", "Gene4", "Gene7", "Gene9")
B <- c(5, 2, 9, 11)
df2 <- data.frame(A, B)
head(df2)

      A  B
1 Gene3  5
2 Gene4  2
3 Gene7  9
4 Gene9 11

现在我想创建一个新的数据框,其中包含 df1 和 df2 都具有相似的 A 列的值(例如 Gene3、Gene4 和 Gene9),以及来自 df1 和 df2 的 B 列的 BOTH 值,如下所示:

A <- c("Gene3", "Gene4", "Gene9")
B_df1 <- c(-4, 4, 19)
B_df2 <- c(5, 2, 11)
dfcombo <- data.frame(A, B_df1, B_df2)
head(dfcombo)

      A B_df1 B_df2
1 Gene3    -4     5
2 Gene4     4     2
3 Gene9    19    11

然后,我还想要另一个数据框,其中仅包含对 df1 的 A 列具有唯一值的行,而另一个数据框仅包含对 df2 具有唯一 A 列值的行。

#the final printout for this example should look like this:
head(df1_unique)

      A   B
1 Gene1 -10

head(df2_unique)

      A B
1 Gene7 9

所以最后我应该得到 3 个数据框。谢谢!

标签: rdataframedplyrtidyverse

解决方案


碱基R

merge(df1, df2, by = "A", suffixes = c("_df1", "_df2"))
#       A B_df1 B_df2
# 1 Gene3    -4     5
# 2 Gene4     4     2
# 3 Gene9    19    11

tidyverse

library(dplyr)
inner_join(df1, df2, by = "A", suffix = c("_df1", "_df2"))
#       A B_df1 B_df2
# 1 Gene3    -4     5
# 2 Gene4     4     2
# 3 Gene9    19    11

推荐阅读