以下代码语句的区别

时间:2017-07-13 13:11:37

标签: r

我正在关注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函数的手册,它计算了群体平均值超过因子组合这些都超出了我的想法。

希望知道两种方法之间是否有任何根本区别,或只是偏好。

1 个答案:

答案 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)