将数据框中的每一行与 r 中另一个数据框中的每一行匹配
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
在此先感谢您的帮助!
我认为您正在寻找笛卡尔积而不是左连接:
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
您可以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 创建
我们可以用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])
这可能是一个简单的问题,但我似乎找不到明显的解决方案。
我有两个数据框,df1 有 64 行,df2 有 662,343 行。我将 df1 连接到 df2,其中 df1 中的每一行都映射到 df2 中的每一行,因此我有 42,389,952 行。 df1 和 df2 可能分别如下所示:
df1: |癌症 |编号 | |--------------------|------------------| |肉瘤 | 3435 | |白血病 | 4465 |
df2:
基因 |
---|
TP53 |
新数据框:
癌症 | ID | 基因 |
---|---|---|
肉瘤 | 3435 | TP53 |
白血病 | 4465 | TP53 |
在此先感谢您的帮助!
我认为您正在寻找笛卡尔积而不是左连接:
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
您可以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 创建我们可以用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])