在 R 中匹配和合并具有不同列名的数据集

Posted

技术标签:

【中文标题】在 R 中匹配和合并具有不同列名的数据集【英文标题】:Match and merge datasets with different columns names in R 【发布时间】:2020-03-23 11:42:03 【问题描述】:

我有两个数据集,它们之间有共同的列名,但它们中的值有时在数据集之间共享。 举个例子:

df1 <- data.frame(Name = c("Angus", "Angus", "Jason"), 
              Height=c("1.67", "1.67", "1.89"))
df2 <- data.frame(Name = c("Jack", "Brad", "Jason"), 
                  Weight=c("70", "75", "80"))

我想将它们加入一个新的数据框,这样当它们之间没有共同的值时,例如Name 列中的Angus,它将用 NA 填充。 我想要的示例输出:

df3 <- data.frame(Name = c("Angus","Angus","Jack", "Brad", "Jason"), 
                  Height=c("1.69", "1.73", "NA","NA","1.89"),
                  Weight=c("NA","NA","70", "75", "80"))

我没有发布我的原始数据集,因为它是一个大数据集,但这个简单的例子完美地说明了我想要什么。

我已经尝试过将merge() 函数与fill = NA 一起使用,但这不是我想要的。

【问题讨论】:

可能重复***.com/questions/1299871/… 【参考方案1】:

您可能想使用:

merge(df1, df2, all = TRUE)

   Name Height Weight
1 Angus   1.67   <NA>
2 Angus   1.67   <NA>
3 Jason   1.89     80
4  Brad   <NA>     75
5  Jack   <NA>     70

来自文档:

在 SQL 数据库术语中,默认值 all = FALSE 给出了一个 自然连接,内连接的特例。指定 all.x = TRUE 给出一个左(外)连接,all.y = TRUE 一个右(外)连接,并且两者 (all = TRUE) 一个(完整的)外连接。 DBMS 不匹配 NULL 记录, 相当于 R 中的 incomparables = NA。

【讨论】:

【参考方案2】:

我们可以从dplyr使用full_join

library(dplyr)
full_join(df1, df2)
#   Name Height Weight
#1 Angus   1.67   <NA>
#2 Angus   1.67   <NA>
#3 Jason   1.89     80
#4  Jack   <NA>     70
#5  Brad   <NA>     75

【讨论】:

以上是关于在 R 中匹配和合并具有不同列名的数据集的主要内容,如果未能解决你的问题,请参考以下文章

以基因名字合并两个数据集(R语言,merge函数)

合并具有不同列名但定义相同的多个CSV

R基于具有添加条件的特定列合并两个数据集

R语言merge函数连接多个dataframe数据集迭代内连接dataframe数据( iteratively merge data frames in R)默认merge函数通过公共列名合并数据

R语言merge函数左连接dataframe数据(Left (outer) join in R)左连接必须将参数all设置(all.x = TRUE)默认merge函数通过公共列名合并数据集

R语言数据表匹配和拼接-merge函数