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

如何删除特定行中包含na的dplyr列?

  •  1
  • Revan  · 技术社区  · 8 年前

    此代码删除包含至少一个NA的所有列。

    library(dplyr)
    df %>%
        select_if(~ !any(is.na(.)))
    

    如果只想删除第八行中包含NA的列(用于下面生成的数据),我需要修改什么?

    set.seed(1234)
    df <- data.frame(A = 1:10, B = 11:20, C = 21:30)
    df <- as.data.frame(lapply(df, function(cc) cc[ sample(c(TRUE, NA), prob = c(0.85, 0.15), size = length(cc), replace = TRUE) ]))
    
    3 回复  |  直到 8 年前
        1
  •  3
  •   Lennyy    8 年前

    df %>% 
      select_if(!is.na(.[8,]))
    
        A  B
    1   1 11
    2   2 12
    3   3 13
    4   4 NA
    5  NA 15
    6   6 16
    7   7 17
    8   8 18
    9   9 19
    10 10 20
    
        2
  •  4
  •   MKR    8 年前

    base-R

    df[,which(!is.na(df[8,]))]
    

    @RichScriven

    df[, !is.na(df[8,])]
    
    #    A  B
    # 1   1 11
    # 2   2 12
    # 3   3 13
    # 4   4 NA
    # 5  NA 15
    # 6   6 16
    # 7   7 17
    # 8   8 18
    # 9   9 19
    # 10 10 20
    
        3
  •  3
  •   akrun    8 年前

    keep

    library(purrr)
    keep(df, ~ !(is.na(.x[8])))
    #    A  B
    #1   1 11
    #2   2 12
    #3   3 13
    #4   4 NA
    #5  NA 15
    #6   6 16
    #7   7 17
    #8   8 18
    #9   9 19
    #10 10 20
    

    Filter base R

    Filter(function(x) !(is.na(x[8])), df)
    
    推荐文章