在 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函数连接多个dataframe数据集迭代内连接dataframe数据( iteratively merge data frames in R)默认merge函数通过公共列名合并数据
R语言merge函数左连接dataframe数据(Left (outer) join in R)左连接必须将参数all设置(all.x = TRUE)默认merge函数通过公共列名合并数据集