【问题标题】:How can I fill up NA with multi-group by median or mode in R如何在 R 中按中位数或众数填充 NA
【发布时间】:2020-03-05 02:10:27
【问题描述】:

我需要使用 R 中的中值或众数将每个 NA 填充到具有 2-3 组的数据框中。

实际上,我试图将 NA 归为数值变量的中位数分组和因子变量的分组模式。

我搜索了该网站,但找不到任何合适的建议来帮助我。

一些答案​​建议一次估算整个 NA 或仅估算一个变量。我的数据框有 40 多列。

如果有人能清楚地解决它,我将非常感激。

这是我的粗略代码,但它不起作用。

fillna_cols <- c(d,e,f,g,h...)

df %>% 
  group_by(a,b,c) %>% 
  mutate_at(fillna_cols, na.aggregate(df,FUN = median))

【问题讨论】:

    标签: r imputation


    【解决方案1】:

    编造一些数据

    mtcars[ c(4,5,9) , "wt" ] <- NA
    

    看看

    head( mtcars)
    

    用均值覆盖缺失

    mtcars[ is.na( mtcars$wt) , "wt"] <- mean( mtcars$wt , na.rm=T)
    

    或一组中位数

    mtcars[ is.na( mtcars$wt) &mtcars$am %in%0 , "wt"] <- quantile( mtcars[ mtcars$am%in%0 , "wt"] , .5, na.rm=T)
    
    mtcars[ is.na( mtcars$wt) &mtcars$am %in%1 , "wt"] <- quantile( mtcars[ mtcars$am%in%1 , "wt"] , .5, na.rm=T)
    

    或者数据表解决方案

    library( data.table)
    mtcars <- data.table( mtcars)
    #median within cyl/am cells
    mtcars[ , median := quantile( wt , .5 , na.rm=T) , by= .(cyl, am)] 
    mtcars[ , impwt := ifelse( is.na( wt) , median , wt) ]
    

    【讨论】:

    • 非常感谢!好主意!但我的以下问题是 1。如果几个变量是多个类别,而不是二元,而且它不仅仅是一个组(如多组中位数 | 模式的值)。我认为代码会很长 2. 在“多组模式”的情况下我该怎么办?
    • data.table 示例使用了一个四级变量,大概只有两行就可以有任意多个级别
    • @이찬중,已编辑,以找到带有 cyl * am 单元格的中位数。你可以在 by 语句中拥有任意数量的变量
    猜你喜欢
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2023-01-07
    • 2022-11-08
    相关资源
    最近更新 更多