繁体   English   中英

将 dataframe 中的每一行与 r 中另一个 dataframe 中的每一行匹配

[英]Match every row in a dataframe to each row in another dataframe in r

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

我有两个数据框,df1 有 64 行,df2 有 662,343 行。 我将 df1 连接到 df2,其中 df1 中的每一行都映射到 df2 中的每一行,因此我有 42,389,952 行。 df1 和 df2 可能分别如下所示:

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

df2:

基因
TP53

新数据框:

癌症 ID 基因
肉瘤 3435 TP53
白血病 4465 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

reprex package (v2.0.0) 创建于 2021-06-26

我认为您正在寻找笛卡尔积而不是左加入:

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)

-输出

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])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM