簡體   English   中英

為什么使用這兩個數據幀的 dplyr left_join() 和 right_join() 結果不同

[英]Why do results differ for dplyr left_join() and right_join() using these two dataframes

我正在通過執行本課程中的練習來學習如何使用 R dplyr “加入”功能: https://github.com/uclouvain-cbio並陷入了以下描述的問題7

首先,下載用於此問題的示例數據框:

BiocManager::install("UCLouvain-CBIO/rWSBIM1207")

加載 package:

library(rWSBIM1207)

然后在 R/RStudio 中通過鍵入以下內容加載 dataframe 文件、“clinical2”和“表達式”:

data(clinical2)
data(expression)

任務首先是: '使用 left_join 和 right_join 函數通過患者參考連接表達式和臨床 2 表。 ' 我是這樣做的:

left_join(expression, clinical2, 
          by = c("patient" = "patientID"))
right_join(expression, clinical2,
                     by = c("patient" = "patientID"))

第二個任務是解釋為什么結果不同。 我發現 right_join output 與 left_join output 相比多了 3 行。 鑒於“clinical2”有 516 行,而“表達式”有 570 行,這對我來說似乎很奇怪。 r_join output 中存在的 3 個額外行的共同點是它們包含多個 NA 值,這些值可能代表在“臨床 2”中而不是“表達”中發現的患者。 我真的不明白這里發生了什么,如果有任何幫助,我將不勝感激。

在加入時,有兩件事很重要:

  1. 您從哪一側開始加入,例如哪個表在第一個 position
  2. 給定表的 position,例如 df1、df2,您應用哪種連接方法

看這個例子:

library(dplyr)
library(tibble)

# add ID
iris1<- iris %>% 
  tibble::rowid_to_column("ID")

# add ID
mtcars1 <- mtcars %>% 
  tibble::rowid_to_column("ID")

dim(iris1)
# [1] 150   6

dim(mtcars1)
# [1] 32 12

# 1. iris1 is first and we start from left e.g. iris1

a <- left_join(iris1, mtcars1, by="ID")
dim(a)
# [1] 150  17

# 2. iris1 is still first, but we join from right e.g. mtcars1
b <- right_join(iris1, mtcars1, by="ID")
dim(b)
# [1] 32 17

# 3. mtcars1 is first and we join from left e.g mtcars1
a1 <- left_join(mtcars1, iris1, by="ID")
dim(a1)
# [1] 32 17

-> b = a1 e.g. right_join(iris1, mtcars1, by="ID") = left_join(mtcars1, iris1, by="ID")

https://www.rdocumentation.org/packages/dplyr/versions/0.7.8/topics/join

暫無
暫無

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

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