【问题标题】:Match and merge datasets with different columns names in R在 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 一起使用,但这不是我想要的。

【问题讨论】:

标签: r dataframe merge dataset match


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 2023-02-24
      • 2020-03-05
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      相关资源
      最近更新 更多