簡體   English   中英

通過過濾/匹配在R中進行交叉連接

[英]Cross join in R with filtering/matching

我想在R中進行交叉data.table 。如果我們沒有條件,那么data.table包將做到這一點。 但是,R中的此SQL查詢相當於什么?

Select table1.value as value1, table2.value as value2
from table1 cross join table2 where table1.id = table2.id

考慮這個例子

table1:
id  value
1   1
1   2
2   1
3   1
3   3
3   4

table2:
id  value
1   5
1   4
2   1
3   4
3   3

在這種情況下,我想要的輸出是:

value1 value2
1      5
1      4
2      5
2      4
1      1
1      4
1      3
3      4
3      3
4      4
4      3

請注意,id列既不是唯一的,也不是結果集具有唯一的行。

您需要的是value.x和value.y列

   table1 <- data.frame(id= c(1,1,2,3,3,3), value=c(1,2,1,1,3,4))
   table2 <- data.frame(id=c(1,1,2,3,3), value=c(5,4,1,4,3))
   merge(table1,table2,by="id",all.y=TRUE)



   id    value.x  value.y
1   1       1       5
2   1       1       4
3   1       2       5
4   1       2       4
5   2       1       1
6   3       1       4
7   3       1       3
8   3       3       4
9   3       3       3
10  3       4       4
11  3       4       3

根據定義,至少在R術語中,不能交叉連接索引。 您上面擁有的是內部聯接。

library(dplyr)

table1 %>% select(table1.value = value, id) %>%
  inner_join(table2 %>% select(table2.value = value, id))

如果您想要的是能夠同時交叉聯接和過濾,那么您可能不得不看一下data.table,因為它們不能在dplyr中組合。

   table1 %>% select(table1.value = value, table1.id = id) %>%
     merge(table2 %>% select(table2.value = value, table2.id = id)) %>%
     filter(table1.id == table2.id)

暫無
暫無

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

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