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

在一个特定列中保留值为空的行,并删除所有其他列中值为空的行

  •  2
  • DTYK  · 技术社区  · 8 年前

    我有一个数据框架,由参与者的分数组成,格式很宽,每列代表一个问卷项目,每行代表一个参与者的回答。

    我的数据如下所示:

    id <- c("001", "002", "003", "004", "005")
    q1 <- c(1, 2, "", 3, 5)
    q2 <- c("", 2, 3, 1, "")
    q3 <- c(1, 3, 2, 5, 2)
    q4 <- c(1, 2, 3, "", 4)
    q5 <- c(1, 2, 3, 4, 3)
    df <- data.frame(id, q1, q2, q3, q4, q5)
    df[, 2:6] <- apply(df[, 2:6], 2, as.numeric)
    

    我想在参与者离开某个特定列时保留他们的数据行,比如说Q4,空白。同时,我希望排除一行,只要Q4以外的任何项目为空。

    我想到的最终结果就像下面的屏幕截图。参与者001和005被删除,因为他们缺少Q2分数。参与者003因缺少Q1分数而被删除。尽管参与者004的第四季度分数缺失,但我仍然希望将参与者004保留在数据框中。

    End Result

    如果可能的话,有人能给我一个可以在dplyr管道中使用的答案吗?谢谢,非常感谢!

    2 回复  |  直到 8 年前
        1
  •  1
  •   nghauran    8 年前

    尝试 drop_na( 从 tidyr

    library(tidyr)
    df %>% drop_na(-q4)
    
    # output
       id q1 q2 q3 q4 q5
    #2 002  2  2  3  2  2
    #4 004  3  1  5 NA  4
    
        2
  •  1
  •   Shique    8 年前

    基底R使用 complete.cases 和 which

    df[complete.cases(df[,-which(names(df) %in% "q4")]),]
    #   id q1 q2 q3 q4 q5
    #2 002  2  2  3  2  2
    #4 004  3  1  5 NA  4
    

    或按列位置

    df[complete.cases(df[,-5]),]
    #   id q1 q2 q3 q4 q5
    #2 002  2  2  3  2  2
    #4 004  3  1  5 NA  4