📅  最后修改于: 2023-12-03 15:11:14.494000             🧑  作者: Mango
在数据分析和数据预处理过程中,很常见的情况是存在缺失值。缺失值可能会对后续的统计分析造成影响,因此我们需要对缺失值进行清洗。在 R 中,我们可以使用列的均值来替换缺失值。
使用 mean()
函数可以计算 DataFrame 中某一列的均值。我们可以将均值用 replace()
函数替换掉 DataFrame 中的缺失值。
# 假设我们的 DataFrame 名称为 df,含有缺失值的列为 'col'
# 使用以下命令来更新缺失值为 'col' 列的均值
df$col[is.na(df$col)] <- mean(df$col, na.rm = TRUE)
# 说明:
# df$col 是指 DataFrame df 中名为 'col' 的列
# is.na() 函数用于判断单元格是否为空缺
# mean() 函数用于计算均值,na.rm = TRUE 表示不计算空缺值
# 最后 '<-' 符号是赋值操作,将缺失值位置的数值替换为均值
我们可以将上述代码封装成函数,以方便重复使用。
# 函数名称:replaceMissingWithMean
# 参数说明:
# data:(DataFrame) 待处理的 DataFrame
# col:(string) 待处理列的列名
# 返回值:(DataFrame) 更新后的 DataFrame
replaceMissingWithMean <- function(data, col) {
data[col][is.na(data[col])] <- mean(data[col], na.rm = TRUE)
return(data)
}
以下是使用 replaceMissingWithMean()
函数进行处理的示例代码。
# 载入数据
data(iris)
# 数据清洗
# 将 iris 数据集的第四列(花瓣宽度)的第一行和第七行的值赋成缺失值。
iris[1,4] <- NA
iris[7,4] <- NA
# 输出前十行数据
head(iris, 10)
# 更新缺失值为均值
iris_updated <- replaceMissingWithMean(iris, 'Petal.Width')
# 输出前十行更新后的数据
head(iris_updated, 10)
执行以上代码后,输出结果如下。
# 输出前十行数据
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 NA setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 NA setosa
8 5.0 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
10 4.9 3.1 1.5 0.1 setosa
# 输出前十行更新后的数据
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 1.2146341 setosa
2 4.9 3.0 1.4 0.2000000 setosa
3 4.7 3.2 1.3 0.2000000 setosa
4 4.6 3.1 1.5 0.2000000 setosa
5 5.0 3.6 1.4 0.2000000 setosa
6 5.4 3.9 1.7 0.4000000 setosa
7 4.6 3.4 1.4 1.2146341 setosa
8 5.0 3.4 1.5 0.2000000 setosa
9 4.4 2.9 1.4 0.2000000 setosa
10 4.9 3.1 1.5 0.1000000 setosa
我们可以看到,数据集中的缺失值已被替换为花瓣宽度的均值。