【问题标题】:Merging R DataFrames with different number of columns and rows合并具有不同列数和行数的 R DataFrame
【发布时间】:2016-03-24 02:50:00
【问题描述】:

我正在尝试通过称为用户名的列组合 2 个数据框。一个数据框包含 12 个变量和 1619 行观测值。另一个包含 37 列,包含 1603 个观测值。我想匹配每个数据集中的用户名,但保留所有数据。我尝试过合并,但我总是得到 Y 数据集的 NA (除非 colname 在两组数据中)。有没有办法通过“用户名”等列名将一组数据附加到另一组数据?

示例如下:

DataFrame 1
Username      HighschoolGPA     Age     Applydate
Smith, John   3.1               18      03-12-2012

DataFrame 2
Username    LiveOnCampus        Major       StudentGroup_Academic       
Smith, John  Yes                Chemistry   No              

Final DataFrame
Username HighschoolGPA Age Applydate LiveOnCampus Major StudentGroup_Academic
Smith, John 3.1         18  03-12-2012  Yes     Chemistry   No              

【问题讨论】:

    标签: r merge


    【解决方案1】:
    df1 <- data.frame(Username='Smith, John',HighschoolGPA=3.1,Age=18,Applydate='03-12-2012',stringsAsFactors=F);
    df2 <- data.frame(Username='Smith, John',LiveOnCampus='Yes',Major='Chemistry',StudentGroup_Academic='No',stringsAsFactors=F);
    merge(df1,df2,'Username');
    ##      Username HighschoolGPA Age  Applydate LiveOnCampus     Major StudentGroup_Academic
    ## 1 Smith, John           3.1  18 03-12-2012          Yes Chemistry                    No
    

    【讨论】:

      【解决方案2】:

      当合并函数匹配多列并生成许多唯一组合时,您通常会得到 Y 组数据的 NA。

      确保用户名列的类型相同,确保它们不是因素,并为合并函数指定更多参数。

      如果您想保留所有匹配和不匹配的结果,请尝试merge(df1, df2, by = "username", all.x = TRUE, all.y = TRUE)

      如果您只想保留用户名匹配的条目,请尝试merge(df1, df2, by = "username", all.x = FALSE, all.y = FALSE)

      希望这会有所帮助!

      【讨论】:

      • 将用户名转换为字符会更好吗?此外,当它确实将两者合并在一起时,我会得到一些列类似 email.x 和 email.y 的内容。这是匹配多列的问题吗?
      • 所以,我对数据进行了更多清理,并消除了重复数据。然后我使用了你的代码,它工作得很好。我假设太多重复的列导致我的第二个数据框中的 NA 结果。感谢您的帮助。
      猜你喜欢
      • 2019-10-22
      • 2020-11-17
      • 2022-11-24
      • 2016-05-14
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多