我有一个非常大的数据集,我希望在所有连续变量中将中位数归入缺失值,并将“不可用”填入所有分类。
data[ ,sapply(data, is.numeric)]
data[ ,sapply(data, is.character)]
我正在使用这些函数来确定哪个是哪个,但我不知道如何使用它们来做我想要的。任何帮助都会受到赞赏。
答案 0 :(得分:0)
以下代码可行。我不确定是否有更有效的方法来做到这一点。
library(data.table)
dt = data.table(continuous = c(rnorm(5), NA), categorical = c(LETTERS[1:5],NA))
> dt
continuous categorical
1: 0.77044982 A
2: 0.12955447 B
3: -0.03965276 C
4: 1.59332441 D
5: 0.21909899 E
6: NA NA
fixColumns = function(x){
if(class(x) %in% c("factor", "character")){
if(any(is.na(x))){
x[is.na(x)] = "Not Available"
return(x)
}else{
return(x)
}
}else{
if(any(is.na(x))){
x[is.na(x)] = median(x, na.rm = TRUE)
return(x)
}else{
return(x)
}
}
}
dt = dt[ , lapply(.SD, fixColumns)]
> dt
continuous categorical
1: 0.77044982 A
2: 0.12955447 B
3: -0.03965276 C
4: 1.59332441 D
5: 0.21909899 E
6: 0.21909899 Not Available