📅  最后修改于: 2023-12-03 14:50:39.979000             🧑  作者: Mango
本篇教程将介绍如何在 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 函数将这两个数据框按照 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 包的 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 语言中数据框的基本操作。