簡體   English   中英

R:通過* list *列連接兩個表(小標題)

[英]R: Join two tables (tibbles) by *list* columns

似乎應該對此有一個簡單的答案,但我一直找不到:

tib1 <- tibble(x = list(1, 2, 3), y = list(4, 5, 6))
tib1
# A tibble: 3 × 2
      x         y
 <list>    <list>
1 <dbl [1]> <dbl [1]>
2 <dbl [1]> <dbl [1]>
3 <dbl [1]> <dbl [1]>

tib2 <- tibble(x = list(1, 2, 4, 5), y = list(4, c(5, 10), 6, 7))
tib2
# A tibble: 4 × 2
      x         y
 <list>    <list>
1 <dbl [1]> <dbl [1]>
2 <dbl [1]> <dbl [2]>
3 <dbl [1]> <dbl [1]>
4 <dbl [1]> <dbl [1]>

dplyr::inner_join(tib1, tib2)

通過= c(“ x”,“ y”)加入

inner_join_impl(x,y,by $ x,by $ y,后綴$ x,后綴$ y)中的錯誤:由於類型(列表/列表)不兼容,無法在'x'x'x'上加入

那么有沒有一種方法可以基於列表列執行聯接(在我開始編寫自己的列之前)?

基本上,如果兩個關鍵變量的列表相同,則我希望該行包含在最終表中,否則,不包含在內。 在上面的示例中,有兩個關鍵變量xy ,結果應該只是兩個tibble的第一行,因為它是兩個關鍵變量中唯一相同的變量:

tibble(x = list(1), y = list(4))
# A tibble: 1 × 2
      x         y
 <list>    <list>
1 <dbl [1]> <dbl [1]>

我們可以使用digest哈希值:

tib1 <- tibble(x = list(1, 2, 3), y = list(4, 5, 6))
tib2 <- tibble(x = list(1, 2, 4, 5), y = list(4, c(5, 10), 6, 7))

tib1 <- mutate_all(tib1, funs(hash = map_chr(., digest::digest)))
tib2 <- mutate_all(tib2, funs(hash = map_chr(., digest::digest)))

inner_join(tib1, tib2, c('x_hash', 'y_hash')) %>%
  select(x.x, x.y)
 # A tibble: 1 × 2 xx xy <list> <list> 1 <dbl [1]> <dbl [1]> 

暫無
暫無

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

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