我正在关注Udemy的机器学习课程,并且教师编写了以下R代码来填充缺失的值
dataset = read.csv("../data.csv")
dataset$Age = ifelse(is.na(dataset$Age),
ave(dataset$Age, FUN = function(x) mean(x, na.rm=T)), dataset$Age)
我尝试重新编写代码并在没有ave
函数的情况下执行,而是直接调用mean
函数,如下所示。
dataset$Age= ifelse(is.na(dataset$Age),
mean(dataset$Age, na.rm = T), dataset$Age)
以上语句都返回了相同的结果。
然后我阅读了ave
函数的手册,它计算了群体平均值超过因子组合这些都超出了我的想法。
希望知道两种方法之间是否有任何根本区别,或只是偏好。
答案 0 :(得分:1)
如果您输入一个额外的变量来指示这些组进入ave
函数,那么它只会有所不同。您在此处看到的代码基本上将所有NA归入Age
的平均值,但您可能希望使用组变量,例如Gender
,具有NA的女性应该由女性应该按男性平均值计算,在这种情况下,您可能会使用类似
dataset$Age = ifelse(is.na(dataset$Age),
ave(dataset$Age, dataset$Gender,FUN = function(x) mean(x, na.rm=T)),
dataset$Age)