R最常见因素(是/否)

时间:2017-03-19 15:37:18

标签: r

我是R的新手,正在研究我的第一个数据集,因此也是这些问题。如果它非常基本,我道歉。

我有一个包含少量列的数据框(Df)(一些内插,一些因素和少量文本)。

因子变量(例如:f1)都具有True / False / NA值。我试图用最常见的值替换缺失值。

我知道每个因子变量的最常见值。我发现它们使用summary(Df)。但是,不想硬代码或使用太多代码行。我来自数据库背景,我将数据框可视化为一个表,并将此因子变量视为一列。也许这就是我的问题!

以下是我尝试的选项及其无效的原因:

  1. Df$f1[is.na(Df$D1)] <- median(as.numeric(levels(Df$f1)),na.rm=TRUE)
  2. 自投掷warning : NAs introduced by coercion以来,这无效。

    1. 我尝试使用as.numeric将因子转换为数字,然后找到中位数和重新编码。但它将大部分内容转换为NA s。
    2. 请帮忙!

2 个答案:

答案 0 :(得分:0)

如果colnums是要更改NA值的因子变量列数的向量,则可以使用以下内容。如果您想更改所有因素,请使用

colnums <- which(sapply(df,is.factor))

NA2mf <- function(col.num, df){
    col <- df[,col.num]
    tab <- table(col)
    max <- which.max(tab)
    if(sum(tab == tab[max]) > 1) {
        warning(paste('no unique most frequent factor in var', as.character(names(df)[col.num])))
    }
    col[is.na(col)] <- names(max)
    col
}

df[,colnums] <- sapply(colnums, NA2mf, df = Df)

答案 1 :(得分:0)

代码少一点的另一种选择:

0.14.3

对于以后的R&C,使用令人敬畏的dt = data.frame(x = sample(c(letters[1:5],NA),50,replace=TRUE)) for(field in names(dt)){ dt[is.na(dt[,field]),field] <- names(sort(table(dt$x),TRUE)[1]) } 软件包,有更优雅的方法来实现这一目标。