[英]R: Merge two data frames based on value in column and return all values of both data frames
假設我有以下 dfs
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”的兩個 dfs 條件,給我以下 df
a b c d
1 2 3 4
4 3 3 4
9 7 3 4
2 2 3 4
3 2 3 4
在我的數據集中我嘗試使用
merge <- merge(x = df1, y = df2, by = "a", all = TRUE)
然而,雖然 df1 有 50,000 個條目,df2 有 100,000 個條目,並且列 a 中肯定有匹配的值,但合並后的 df 有超過一百萬個條目。 我不明白。 據我了解,應該是最大的。 合並的 df 中有 150,000 個條目,這就是當兩個 dfs 之間 a 列中沒有值相等時的情況。
我認為你想要做的不是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))
解決方案:
行綁定df1
和df2
:
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
使用tidyverse
,我們可以做bind_rows
和distinct
library(dplyr)
bind_rows(df1, df2) %>%
distinct
df1 <- structure(list(a = c(1, 4, 9), b = c(2, 3, 7), c = c(3, 3, 3),
d = c(4, 4, 4)), class = "data.frame", row.names = c(NA,
-3L))
df2 <- structure(list(a = c(1, 2, 3), b = c(2, 2, 2), c = c(3, 3, 3),
d = c(4, 4, 4)), class = "data.frame", row.names = c(NA,
-3L))
這是可能的
dplyr::union(df1, df2)
這是另一個使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.