知道我用于匹配两个数据集的变量不是唯一的,如何在 R 中合并不同的数据集?

How can I merge different data sets in R knowing that the variable that I use for matching the two data set are not unique?

我有两个数据集,我需要通过ID值合并它们。问题是:

  1. ID 值可以在同一数据集中重复(没有其他唯一值可用)。
  2. 两个数据集的行数或列数不相等。

示例:

df1

ID Gender
99 Male
85 Female
7 Male

df2

ID Body_Temperature Body_Temperature_date_time
99 36 1/1/2020 12:00 am
99 38 2/1/2020 10:30 am
99 37 1/1/2020 06:41 am
52 38 1/2/2020 11:00 am
11 39 4/5/2020 09:09 pm
7 35 9/8/2020 02:30 am

我如何才能将这两个数据集转换成一个数据集,以便我以后可以在其上应用一些机器学习模型?

根据您的预期结果,如果您想要 return 来自每个数据框的所有行,那么您可以使用来自 dplyr:

full_join
library(dplyr)

full_join(df2, df1, by = "ID")

或以 R 为基数:

merge(x=df2,y=df1,by="ID",all=TRUE)

输出

  ID Body_Temperature Body_Temperature_date_time Gender
1 99               36          1/1/2020 12:00 am   Male
2 99               38          2/1/2020 10:30 am   Male
3 99               37          1/1/2020 06:41 am   Male
4 52               38          1/2/2020 11:00 am   <NA>
5 11               39          4/5/2020 09:09 pm   <NA>
6  7               35          9/8/2020 02:30 am   Male
7 85               NA                       <NA> Female

如果你有超过 2 个数据帧要合并,它们只与 ID 列重叠,那么你可以在数据帧列表上使用 reduce(所以把你想要的所有数据帧组合成一个列表):

library(tidyverse)

df_list <- list(df1, df2)

multi_full <- reduce(df_list, function(x, y, ...)
  full_join(x, y, by = "ID", ...))

Reduce 以 R 为基数:

df_list <- list(df1, df2)

multi_full <- Reduce(function(x, y, ...)
    merge(x, y, by = "ID", all = TRUE, ...), df_list)

数据

df1 <- structure(list(ID = c(99L, 85L, 7L), Gender = c("Male", "Female", 
"Male")), class = "data.frame", row.names = c(NA, -3L))

df2 <- structure(list(ID = c(99L, 99L, 99L, 52L, 11L, 7L), Body_Temperature = c(36L, 
38L, 37L, 38L, 39L, 35L), Body_Temperature_date_time = c("1/1/2020 12:00 am", 
"2/1/2020 10:30 am", "1/1/2020 06:41 am", "1/2/2020 11:00 am", 
"4/5/2020 09:09 pm", "9/8/2020 02:30 am")), class = "data.frame", row.names = c(NA, 
-6L))