将一个数据帧中的每一行与r中另一个数据框中的每行进行匹配



这可能是一个简单的问题,但我似乎找不到明显的解决方案。

我有两个数据帧,df1有64行,df2有662343行。我将df1连接到df2,其中df1中的每一行都映射到df2中的每行,因此我有42389952行。df1和df2可能分别如下:

df1:|癌症|ID||---------------------|------------------||肉瘤|3435||白血病|4465|

df2:

基因
TP53

您可以在没有任何匹配列的情况下full_join。因此,在匹配列参数时使用by = character()。演示

df <- data.frame(X = c(1, 2))
df2 <- data.frame(A = letters[1:3],
B = LETTERS[24:26])
df
#>   X
#> 1 1
#> 2 2
df2
#>   A B
#> 1 a X
#> 2 b Y
#> 3 c Z
dplyr::full_join(df2, df, by = character())
#>   A B X
#> 1 a X 1
#> 2 a X 2
#> 3 b Y 1
#> 4 b Y 2
#> 5 c Z 1
#> 6 c Z 2

创建于2021-06-26由reprex包(v2.0.0(

我认为您正在寻找笛卡尔乘积,而不是左联接:

library(tidyr)
expand_grid(df1,df2)
# A tibble: 2 x 3
Cancer      ID Gene 
<chr>    <dbl> <chr>
1 Sarcoma   3425 TP53 
2 Leukemia  4465 TP53 

我们可以使用merge

merge(df2, df, all = TRUE)

-ouptut

A B X
1 a X 1
2 b Y 1
3 c Z 1
4 a X 2
5 b Y 2
6 c Z 2

数据

df <- data.frame(X = c(1, 2))
df2 <- data.frame(A = letters[1:3],
B = LETTERS[24:26])

最新更新