2017-07-13 77 views
1

我下面就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

只有當您向ave函數中輸入指示組的組變量時,纔會有所不同。您在這裏看到的代碼基本上是以Age的均值來計算所有NA,但您可能希望使用組變量,例如Gender,NA中的女性應該由女性的平均值來表示,而男性應該是按男性平均值計算,在這種情況下,你可能會用像......

dataset$Age = ifelse(is.na(dataset$Age), 
ave(dataset$Age, dataset$Gender,FUN = function(x) mean(x, na.rm=T)), 
dataset$Age)