R:根据列中的值合并两个数据帧,并返回两个数据帧的所有值

时间:2020-03-16 17:03:29

标签: r merge

假设我有以下dfs

PORT = 3000
DATABASE_LOCAL = mongodb://localhost:27017/employees

现在,我想合并列“ a”的两个dfs给我以下df

df1:
a b c d
1 2 3 4
4 3 3 4
9 7 3 4

df2:
a b c d
1 2 3 4
2 2 3 4
3 2 3 4

在我的数据集中,我尝试使用

a b c d
1 2 3 4
4 3 3 4
9 7 3 4
2 2 3 4
3 2 3 4

但是,虽然df1有50,000个条目,而df2有100,000个条目,并且列a中肯定有匹配的值,但合并的df有超过一百万个条目。我不明白。据我了解应该有最大。合并的df中有150,000个条目,当两个df中的a列中的值都不相等时,就是这种情况。

4 个答案:

答案 0 :(得分:3)

我认为您要做的不是merge,而是rbind这两个数据帧并删除duplicated行:

数据

df1 <- data.frame(a = c(1,4,9),
                  b = c(2,3,7),
                  c = c(3,3,3),
                  d = c(4,4,4))
df2 <- data.frame(a = c(1,2,3),
                  b = c(2,2,2),
                  c = c(3,3,3),
                  d = c(4,4,4))

解决方案

行绑定df1df2

df3 <- rbind(df1, df2)

删除重复的行:

df3 <- df3[!duplicated(df3), ]

结果

df3
  a b c d
1 1 2 3 4
2 4 3 3 4
3 9 7 3 4
5 2 2 3 4
6 3 2 3 4

答案 1 :(得分:1)

有了NotifyUsers(new List<int>{9999},我们可以做tidyversebind_rows

distinct

数据

library(dplyr)
bind_rows(df1, df2) %>%
     distinct

答案 2 :(得分:0)

有可能

dplyr::union(df1, df2)

答案 3 :(得分:0)

这是使用rbind + %in%

的另一个基本R解决方案
dfout <- rbind(df1,subset(df2,!a %in% df1$a))

这样

> rbind(df1,subset(df2,!a %in% df1$a))
   a b c d
1  1 2 3 4
2  4 3 3 4
3  9 7 3 4
21 2 2 3 4
31 3 2 3 4