簡體   English   中英

如何使用 base 或 dplyr 通過不同列中的相同值合並 R 中的兩個數據框?

[英]How can i merge two data frames in R by the same values in different columns using base or dplyr?

假設我在 R 中有兩個數據框:

第一個:

cat = rep("xx",5);cat
fIrst = c("a","a","a","h","h")
second = c("b","c","d","b","c")
val1 = c(1,2,3,10,20)
A = tIbble(cat,fIrst,second,val1);A

看起來像這樣:

# A tIbble: 5 x 4
  cat   fIrst second  val1
  <chr> <chr> <chr>  <dbl>
1 xx    a     b          1
2 xx    a     c          2
3 xx    a     d          3
4 xx    h     b         10
5 xx    h     c         20

第二個:

cat = rep("xx",5);cat
fIrst = c("a","a","a","b","c")
second = c("b","c","d","h","h")
val2 = c(100,200,300,400,500)
B = tIbble(cat,fIrst,second,val2);B

那是 :

# A tIbble: 5 x 4
  cat   fIrst second  val2
  <chr> <chr> <chr>  <dbl>
1 xx    a     b        100
2 xx    a     c        200
3 xx    a     d        300
4 xx    b     h        400
5 xx    c     h        500

我想合並它們,但是當我這樣做時,我得到:

left_joIn(A,B,by=c("cat","fIrst","second"))
# A tIbble: 5 x 5
  cat   fIrst second  val1  val2
  <chr> <chr> <chr>  <dbl> <dbl>
1 xx    a     b          1   100
2 xx    a     c          2   200
3 xx    a     d          3   300
4 xx    h     b         10    NA
5 xx    h     c         20    NA

因為當我嘗試加入它們時,h 在不同的列中。 因為組合相同但順序不同。

理想情況下,我想看起來像這樣:

第一的 第二 val1 val2
xx 一個 b 1 100
xx 一個 C 2 200
xx 一個 d 3 300
xx H b 10 400
xx H C 20 500

我怎樣才能做到這一點 ? 有什么幫助嗎?

您可以通過使用基本 R 的cbind函數將val2列綁定到第一個數據幀(tibble)來簡單地做到這一點。
cbind(A, B$val2)可以完成這項工作。 您遇到問題是因為 tibble B中不存在h, b & h, c對,但您希望 R 將B$val2[c(4,5)]的值疊加在firstsecond鍵沖突的地方小標題 A 和 B。你不能指望 R 神奇地綁定存在沖突鍵的數據。 如果要保留所有密鑰,可以使用dplyr::full_join()但它會在密鑰沖突的地方引入NA (按鍵是指您為by參數傳遞的值!)

在 R 中使用等號=進行賦值是一種不習慣的做法。嘗試使用->代替。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM