所以我在R中有一个数据框,让我们称之为数据集:
str(dataset)
'data.frame': 10 obs. of 4 variables:
$ Country : Factor w/ 3 levels "France","Germany",..: 1 3 2 3 2 1 3 1 2 1
$ Age :List of 10
..$ : int 44
..$ : int 27
..$ : int 30
..$ : int 38
..$ : int 40
..$ : int 35
..$ : num NA
..$ : int 48
..$ : int 50
..$ : int 37
$ Salary : num 72000 48000 54000 61000 63778 ...
$ Purchased: Factor w/ 2 levels "No","Yes": 1 2 1 1 2 2 1 2 1 2
我希望使用这些列的相应方法替换Age和Salary列中的NA值。为此,我编写了以下代码:
dataset$Age = ifelse(is.na(dataset$Age),
ave(dataset$Age, FUN = function(x) mean(x, na.rm = TRUE)),
dataset$Age)
dataset$Salary = ifelse(is.na(dataset$Salary),
ave(dataset$Salary, FUN = function(x) mean(x, na.rm = TRUE)),
dataset$Salary)
以上代码适用于Salary列,但会在Age列中引发以下错误:
Warning message:
In mean.default(x, na.rm = TRUE) :
argument is not numeric or logical: returning NA
我也尝试使用sapply:
dataset$Age = ifelse(is.na(dataset$Age),
sapply(dataset$Age, mean, na.rm = TRUE),
dataset$Age)
尽管sapply并没有发出任何警告,但它也不适合我。它只是取代了' na'使用' NaN'在Age列中的值。虽然申请Salary列时使用相同的代码。
请帮我确定问题所在以及如何使我的代码可行?谢谢!