代码之家  ›  专栏  ›  技术社区  ›  Laura

删除具有NA值的特定列

  •  2
  • Laura  · 技术社区  · 6 年前

    set.seed(1)
    df <- data.frame(A = 1:50, B = 11:60, c = 21:70)
    head(df)
    df.final <- as.data.frame(lapply(df, function(cc) cc[ sample(c(TRUE, NA), prob = c(0.85, 0.15), size = length(cc), replace = TRUE) ]))
    

    我想删除最后5个值不是由NA填充的列。也就是说,只保留行中值为46到50的列。最后5个值包含一个或多个NAs的列将被删除。

    有什么帮助吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Shree    6 年前

    dplyr::select() 接受整数列位置。我们可以用它来达到这个目的-

    result <- df.final %>% select(., which(!is.na(colSums(tail(., 5)))))
    head(result)
       A  B
    1  1 11
    2  2 NA
    3  3 13
    4 NA 14
    5  5 15
    6 NA 16
    
        2
  •  2
  •   Yuri-M-Dias    6 年前

    史莱比我快,但可能会派上用场:

    > df.final %>% tail
        A  B  c
    45 45 55 65
    46 46 NA 66
    47 47 57 67
    48 NA 58 68
    49 NA 59 69
    50 NA 60 NA
    
    > df.final %>%
    +     select_if(~ !any(is.na(tail(., n = 1)))) %>%
    +     tail()
        B
    45 55
    46 NA
    47 57                                                           
    48 58                                                          
    49 59                                                            
    50 60
    

    换个衣服就行了 n 上一个NAs的数量。