【问题标题】:How do I impute missing variables in R using dplyr?如何使用 dplyr 估算 R 中缺失的变量?
【发布时间】:2016-11-18 08:05:30
【问题描述】:

我想在给定现有值的情况下为变量估算缺失值。 在var2 中,我们注意到有很多NAs。

  1. 如果任意 2 个 id 相同,则它们的 var2 值相同。
  2. 如果 id 没有 var2 的值,例如 id==2,那么我们只输出为 NA

它应该是从df_olddf_new.

 df_old<- read.table(header = TRUE, text = "
 id  var1  var2 
  1  A       12    
  1  B       NA    
  1  E       NA    
  2  G       NA
  2  J       NA
 ")

df_new<- read.table(header = TRUE, text = "
id  var1  var2 
 1  A       12    
 1  B       12    
 1  E       12    
 2  G       NA
 2  J       NA
")

我试过了:

df_new<-df_old %>%
        group_by(id) %>%
        mutate(var2=na.omit(var2))

我相信由于第二种情况它不起作用。我还想知道使用 ifelse 是否可以。需要帮助谢谢!

【问题讨论】:

    标签: r dplyr data-manipulation


    【解决方案1】:

    如果每个 id 只有一个 var2 值可用,您可以这样做:

    df_old %>%
      group_by(id) %>%
      mutate(var2 = min(var2, na.rm = TRUE))
    
    Source: local data frame [5 x 3]
    Groups: id [2]
    
         id   var1  var2
      <int> <fctr> <int>
    1     1      A    12
    2     1      B    12
    3     1      E    12
    4     2      G    NA
    5     2      J    NA
    

    另一种选择是:

    mutate(var2 = var2[1])
    

    【讨论】:

    • 嘿,我需要帮助。我刚刚下载了最新的 R 软件(版本 3.3.1),每个组的计算功能都有问题。你的代码给了我 12 整列。我想知道这个新版本中是否存在某种错误?
    • @HNSKD 也许你已经加载了 plyr 包?试试dplyr:: mutate(var2 = min(var2, na.rm = TRUE))
    • @HNSKD 嗯,对此无能为力,抱歉。我使用 R 版本 3.3.0 和 dplyr 0.5.0
    • @beetroot 如果var2 是字符变量,我们如何进行插补?例如,如果将 12 更改为 P 会怎样?
    【解决方案2】:

    我们可以使用data.table,但与dplyr不同的是,对于具有所有NA的组,我们必须指定NA才能返回,否则它将返回Inf

    library(data.table)
    setDT(df_old)[, var2 := if(any(!is.na(var2))) min(var2, na.rm = TRUE) 
                else NA_integer_, by = id]
    df_old    
    #    id var1 var2
    #1:  1    A   12
    #2:  1    B   12
    #3:  1    E   12
    #4:  2    G   NA
    #5:  2    J   NA
    

    【讨论】:

      【解决方案3】:

      现在 CRAN 中提供了 tidyimpute 包,看起来它可以解决问题

      "在表格和列表中填补缺失值 (NA) 的函数和方法 仿照 'dplyr' 和 'rlang' 的 tidyverse 方法设计;与 data.tables 也是如此。”

      https://cran.r-project.org/web/packages/tidyimpute/tidyimpute.pdf

      【讨论】:

      猜你喜欢
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 2019-11-02
      • 1970-01-01
      • 2014-06-23
      • 2017-06-23
      相关资源
      最近更新 更多