📜  合并两个不相等的数据帧并在 R 中用 0 替换 NA(1)

📅  最后修改于: 2023-12-03 14:50:39.979000             🧑  作者: Mango

合并两个不相等的数据框并在 R 中用 0 替换 NA

本篇教程将介绍如何在 R 中合并两个不相等的数据框,并用 0 替换其中的 NA 值。我们将演示两种不同的方法。

准备工作

在开始之前,请确保已安装 R 和 RStudio,并掌握基本的 R 语法和数据框的操作。

为了演示,我们将使用以下两个数据框:

df1 <- data.frame(
  id = c(1, 2, 3, 4),
  age = c(21, 34, NA, 27),
  gender = c("M", "F", "M", "F")
)

df2 <- data.frame(
  id = c(1, 3, 5),
  income = c(5000, 8000, 6000),
  married = c(TRUE, FALSE, TRUE)
)

其中,df1 包含每个人的 ID、年龄和性别信息。若有某项信息缺失,则用 NA 表示。df2 包含每个人的 ID、收入和婚姻状况信息。

我们的目标是合并这两个数据框,使得其中的每个人都拥有完整的信息,并用 0 替换其中的 NA 值。

方法一:merge 函数

首先,我们可以使用 merge 函数将这两个数据框按照 ID 合并:

merged_df <- merge(df1, df2, by = "id", all = TRUE)

这里,by 参数指定按照 ID 列进行合并,all 参数将保留所有的行,即使其中有 NA 值。

接下来,我们可以使用 is.na 函数将 NA 值替换为 0:

merged_df[is.na(merged_df)] <- 0

这将替换 merged_df 中所有的 NA 值为 0。

完整的代码如下:

df1 <- data.frame(
  id = c(1, 2, 3, 4),
  age = c(21, 34, NA, 27),
  gender = c("M", "F", "M", "F")
)

df2 <- data.frame(
  id = c(1, 3, 5),
  income = c(5000, 8000, 6000),
  married = c(TRUE, FALSE, TRUE)
)

merged_df <- merge(df1, df2, by = "id", all = TRUE)

merged_df[is.na(merged_df)] <- 0

merged_df

输出结果如下:

  id age gender income married
1  1  21      M   5000    TRUE
2  2  34      F      0       0
3  3   0      M   8000   FALSE
4  4  27      F      0       0
5  5   0      0   6000    TRUE
方法二:dplyr 包

另一个常用的合并数据框的方法是使用 dplyr 包的 full_join 函数:

library(dplyr)

merged_df <- full_join(df1, df2, by = "id")

这里,full_join 函数将保留两个数据框中所有的行,并按照 ID 列进行合并。

同样地,我们可以使用 is.na 函数将 NA 值替换为 0:

merged_df[is.na(merged_df)] <- 0

完整的代码如下:

df1 <- data.frame(
  id = c(1, 2, 3, 4),
  age = c(21, 34, NA, 27),
  gender = c("M", "F", "M", "F")
)

df2 <- data.frame(
  id = c(1, 3, 5),
  income = c(5000, 8000, 6000),
  married = c(TRUE, FALSE, TRUE)
)

library(dplyr)

merged_df <- full_join(df1, df2, by = "id")

merged_df[is.na(merged_df)] <- 0

merged_df

输出结果与上一种方法相同。

到此为止,我们已经学习了两种不同的方法来合并两个不相等的数据框,并用 0 替换其中的 NA 值。希望本篇教程能够帮助你更好地掌握 R 语言中数据框的基本操作。