如何使用dplyr在R中输入缺失的变量?

时间:2016-07-15 07:44:12

标签: r dplyr data-manipulation

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

  1. 如果任何2个ID相同,则var2的值相同。
  2. 如果ID没有var2的值,就像id == 2那样,那么我们只输出NA
  3. 它应该从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是否合适。需要帮助谢谢!

3 个答案:

答案 0 :(得分:4)

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

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])

答案 1 :(得分:1)

我们可以使用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

答案 2 :(得分:0)

到目前为止,CRAN中有可用的tidyimpute软件包,看来可以解决问题了

“用于在表和列表中插入缺失值(NA)的函数和方法 仿照“ dplyr”和“ rlang”的整理方法;与...合作 data.tables。”

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