迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

在 R 中合并两个 Data Frame

作者:迹忆客 最近更新:2023/03/21 浏览次数:

在用 R 代码操作数据时,我们经常会面临将两个 Data Frame 合并成一个 Data Frame 的需求。本教程将看到一些在 R 中高效组合两个 Data Frame 的方法。

假设你有两个 Data Frame,xy,有一些匹配的列。例如:

x <- data.frame(a=c(218, 415, 339), b=c(25, 19, 43), c=c(950, 872, 645))
y <- data.frame(a=c(309, 115), c=c(799, 814))

而你需要把它们组合成一个结果 data frame,比如说,叫做 z。这样的 Data Frame 可以像这样的。

Rdata frame 示例

在 R 中使用 rbind 来合并两个 Data Frame

rbind 函数将数据结构,如 data frame、向量或矩阵,按行组合起来。它的名字代表行绑定。

当使用 rbind 组合两个 data frame 时,两个 data frame 需要有相同的列。因此,在前面的例子中,你需要将 b 列添加到 data frame y 中。可以通过执行这个命令来完成。

y$b <- NA

现在 data frame y 应该是这样的。

R data frame 示例

现在你可以通过执行这个命令,使用 rbindxy data frame 合并到新的 z data frame 中。

x <- data.frame(a=c(218, 415, 339), b=c(25, 19, 43), c=c(950, 872, 645))
y <- data.frame(a=c(309, 115), c=c(799, 814))

y$b <- NA

z <- rbind(x, y)

输出:

    a  b   c
1 218 25 950
2 415 19 872
3 339 43 645
4 309 NA 799
5 115 NA 814

使用 dplyr 软件包

如果你不想为了使用 rbind 而编写额外的一行代码或向其中一个 data frame 添加虚构的列,你可以安装 dplyr 包,然后只需使用:

z <- bind_rows(x, y)

它用 xy 的组合填充 z data frame。

在 R 中组合大型 data frame

前面的例子对于只有几行和 2 或 3 列的小型 data frame 来说,效果不错。但是当你需要合并有很多行和任意列数的大数据集时,最好写一个能更快地完成工作的函数,比如下面这个函数。

quickmerge <- function(df1, df2) {
  df1.names <- names(df1)
  df2.names <- names(df2)
  df2.add <- setdiff(df1.names, df2.names)
  df1.add <- setdiff(df2.names, df1.names)
  if(length(df2.add) > 0) {
    for(i in 1:length(df2.add)) {
      df2[df2.add[i]] <- NA
    }
  }
  if(length(df1.add) > 0) {
    for(i in 1:length(df1.add)) {
      df1[df1.add[i]] <- NA
    }
  }
  return(rbind(df1, df2))
}

这个函数首先比较 data frame 中的列名,然后添加必要的列,使它们相等。最后,它使用 rbind 函数来合并行,并返回结果。调用该函数时,你可以这样使用:

z <- quickmerge(x, y)

完整的示例代码如下:

quickmerge <- function(df1, df2) {
  df1.names <- names(df1)
  df2.names <- names(df2)
  df2.add <- setdiff(df1.names, df2.names)
  df1.add <- setdiff(df2.names, df1.names)
  if(length(df2.add) > 0) {
    for(i in 1:length(df2.add)) {
      df2[df2.add[i]] <- NA
    }
  }
  if(length(df1.add) > 0) {
    for(i in 1:length(df1.add)) {
      df1[df1.add[i]] <- NA
    }
  }
  return(rbind(df1, df2))
}

x <- data.frame(a=c(218, 415, 339), b=c(25, 19, 43), c=c(950, 872, 645))
y <- data.frame(a=c(309, 115), c=c(799, 814))

z <- quickmerge(x, y)

print(z)

输出:

    a  b   c
1 218 25 950
2 415 19 872
3 339 43 645
4 309 NA 799
5 115 NA 814

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

R 中具有多个条件的函数向量化

发布时间:2023/03/21 浏览次数:64 分类:编程语言

一项常见的数据分析任务是根据同一行的其他列使用一个或多个条件创建或更新数据框列。 如果我们尝试使用 if 语句来执行此操作,则只会使用第一行来测试条件,并且会根据该行更

在 R 中读取 xlsx 文件

发布时间:2023/03/21 浏览次数:66 分类:编程语言

在这篇文章中,你将会了解到两个在 R 中读取 xlsx 文件的最完整和最容易使用的库:readxl 和 openxlsx。

清理 R 的环境

发布时间:2023/03/21 浏览次数:178 分类:编程语言

在本教程中,你将学习如何在 R 中编写一个函数,在不需要重新启动 R 的情况下清除环境。

在 R 中注释掉多行

发布时间:2023/03/21 浏览次数:63 分类:编程语言

在本文中,你将学习如何在 R 中注释出多行,而不必在每一行的开头手动写一个#字符来注释。

在 R 中清除内存

发布时间:2023/03/21 浏览次数:197 分类:编程语言

在本教程中,你将学习如何清除 R 系统占用的内存,而不必重新启动它或重新启动它运行的计算机。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便