![](/img/trans.png)
[英]How can I check the values of two columns of 2 data frames for discrepancies grouped by a variable in R using Dplyr?
[英]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)]
的值疊加在first
和second
鍵沖突的地方小標題 A 和 B。你不能指望 R 神奇地綁定存在沖突鍵的數據。 如果要保留所有密鑰,可以使用dplyr::full_join()
但它會在密鑰沖突的地方引入NA
。 (按鍵是指您為by
參數傳遞的值!)
在 R 中使用等號=
進行賦值是一種不習慣的做法。嘗試使用->
代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.