簡體   English   中英

在 R 中使用 full_join 處理重復的列

[英]Dealing with duplicated columns using full_join in R

下午好!

我目前正在使用 R 處理數據操作任務,並面臨兩難境地。

周圍有兩張桌子,我的目標是使用特定的鍵連接這些桌子。

表格1:

Name <- c("John", "Michael", "Anna", "Boris")
ID <- c("ID1", "ID2", "ID3", "ID4")
PDN <- c(40, 10, 6, 70)
Sum3107 <- c(16, 10, 53, 44)
Sum3108 <- c(16, 8, 50, 43)

table1 <- data.frame(Name, ID, PDN, Sum3107, Sum3108)

和表2:

Name <- c("Martin", "Anna", "Olga", "Boris")
ID <- c("ID6", "ID3", "ID7", "ID4")
PDN <- c(22, 6, 44, 70)
Sum3009 <- c(10, 8, 45, 30)
Sum3110 <- c(9, 6, 30, 20)

table2 <- data.frame(Name, ID, PDN, Sum3009, Sum3110)

我選擇了 full_join 運算符,因為它在理論上完美地解決了任務:

table3 <- full_join(table1, table2, by = c("Name", "ID", "PDN"))

一切都是正確的,因為這兩個表中所有重復的列都被選為鍵。

但是,如果我需要 select 作為鍵僅特定列名,並選擇 full_join,R 將復制在表中重復的列,這不是我所期望的。

table3 <- full_join(table1, table2, by = c("Name", "ID")) #"PDN" was removed

是否可以在特定列上運行連接,而不是在兩個表中全部重復而不會得到重復的結果?

預期結果:我想只使用兩個鍵(c(“Name”,“ID”))從兩個表中獲得完全連接,其中顯示“PDN”列但在結果部分(PDN.x 和 PDN)中不重復.y 不在附近)。

先感謝您! 非常感謝任何幫助!

這有幫助嗎? 與完全連接相同的 output 以不同的順序。 我沒有指定 PDN,但我指定了要求和的列,其中不包括 PDN。

bind_rows(table1, table2) %>%
  group_by(Name, ID) %>%
  summarise(across(contains("Sum"), ~sum(.x, na.rm = T)), .groups = "drop")

我還想不出一種方法來讓 R 將 PDN 列與 Sum 列區別對待,而沒有給出一些跡象表明它應該被視為鍵和/或其他應該被視為值。


編輯 - 這並不優雅,但您可以采取的另一種方法是進行您想要的加入,然后“在帖子中修復它”。 這里通過重新整形 long,從列名中刪除任何“.x”或“.y”,過濾第一個非 NA,然后再次旋轉寬來完成。

但這肯定更糟。 :-)

full_join(table1, table2, by = c("Name", "ID")) %>%
  pivot_longer(-c(Name, ID)) %>%
  mutate(name = name %>% str_remove(".x|.y")) %>%
  filter(!is.na(value)) %>%
  group_by(Name, ID, name) %>% slice(1) %>% ungroup() %>%
  pivot_wider(names_from = name, values_from = value)

# A tibble: 6 x 7
  Name    ID      PDN Sum3009 Sum3107 Sum3108 Sum3110
  <chr>   <chr> <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
1 Anna    ID3       6       8      53      50       6
2 Boris   ID4      70      30      44      43      20
3 John    ID1      40      NA      16      16      NA
4 Martin  ID6      22      10      NA      NA       9
5 Michael ID2      10      NA      10       8      NA
6 Olga    ID7      44      45      NA      NA      30

暫無
暫無

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

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