合并没有对应 ID 的数据框
Merge dataframes with no corresponding ID
我有两个数据帧,一个有 ID 和分类结果,第二个有 ID 对应于第一个数据帧的分类结果并与第二个分类输出相关联。我正在尝试根据第一个分类与第二个数据帧的分类 ID 之间的对应关系,将第二个分类输出添加到第一个数据帧。由于ID不对应,无法进行简单的合并。
我不确定我是否清楚,所以我将提供一个可重现的示例。
set.seed(15)
df1 <- data.frame(c(1:20), c(floor(runif(20, min=1, max=6))))
df1 <- setNames(df1, c("ID", "classif"))
df2 <- data.frame(c(1:6), c(floor(runif(6, min=1, max=3))))
df2 <- setNames(df2, c("ID_classif", "classif2"))
下面的第一个数据框显示了 ID 和第一个分类结果
> df1
ID classif
1 1 4
2 2 1
3 3 5
4 4 4
5 5 2
6 6 5
7 7 5
8 8 2
9 9 4
10 10 5
下面的第二个数据框显示了分类 ID 和第二个分类结果。
> df2
ID_classif classif2
1 1 1
2 2 2
3 3 2
4 4 3
5 5 3
6 6 3
我想要获得的数据框如下图所示,它基本上是第一个数据框,使用“classif”和“ID_classif”之间的对应关系添加了第二个分类
> df3
ID classif classif2
1 1 4 3
2 2 1 1
3 3 5 3
4 4 4 3
5 5 2 2
6 6 5 3
7 7 5 3
8 8 2 2
9 9 4 3
10 10 5 2
可能的解决方案:
library(tidyverse)
df1 %>%
left_join(df2, by = c("classif" = "ID_classif"))
#> ID classif classif2
#> 1 1 4 1
#> 2 2 1 2
#> 3 3 5 2
#> 4 4 4 1
#> 5 5 2 2
#> 6 6 5 2
#> 7 7 5 2
#> 8 8 2 2
#> 9 9 4 1
#> 10 10 5 2
#> 11 11 1 2
#> 12 12 4 1
#> 13 13 3 1
#> 14 14 4 1
#> 15 15 5 2
#> 16 16 5 2
#> 17 17 3 1
#> 18 18 5 2
#> 19 19 1 2
#> 20 20 4 1
我有两个数据帧,一个有 ID 和分类结果,第二个有 ID 对应于第一个数据帧的分类结果并与第二个分类输出相关联。我正在尝试根据第一个分类与第二个数据帧的分类 ID 之间的对应关系,将第二个分类输出添加到第一个数据帧。由于ID不对应,无法进行简单的合并。
我不确定我是否清楚,所以我将提供一个可重现的示例。
set.seed(15)
df1 <- data.frame(c(1:20), c(floor(runif(20, min=1, max=6))))
df1 <- setNames(df1, c("ID", "classif"))
df2 <- data.frame(c(1:6), c(floor(runif(6, min=1, max=3))))
df2 <- setNames(df2, c("ID_classif", "classif2"))
下面的第一个数据框显示了 ID 和第一个分类结果
> df1
ID classif
1 1 4
2 2 1
3 3 5
4 4 4
5 5 2
6 6 5
7 7 5
8 8 2
9 9 4
10 10 5
下面的第二个数据框显示了分类 ID 和第二个分类结果。
> df2
ID_classif classif2
1 1 1
2 2 2
3 3 2
4 4 3
5 5 3
6 6 3
我想要获得的数据框如下图所示,它基本上是第一个数据框,使用“classif”和“ID_classif”之间的对应关系添加了第二个分类
> df3
ID classif classif2
1 1 4 3
2 2 1 1
3 3 5 3
4 4 4 3
5 5 2 2
6 6 5 3
7 7 5 3
8 8 2 2
9 9 4 3
10 10 5 2
可能的解决方案:
library(tidyverse)
df1 %>%
left_join(df2, by = c("classif" = "ID_classif"))
#> ID classif classif2
#> 1 1 4 1
#> 2 2 1 2
#> 3 3 5 2
#> 4 4 4 1
#> 5 5 2 2
#> 6 6 5 2
#> 7 7 5 2
#> 8 8 2 2
#> 9 9 4 1
#> 10 10 5 2
#> 11 11 1 2
#> 12 12 4 1
#> 13 13 3 1
#> 14 14 4 1
#> 15 15 5 2
#> 16 16 5 2
#> 17 17 3 1
#> 18 18 5 2
#> 19 19 1 2
#> 20 20 4 1