【问题标题】:Retain rows with blank values in one particular column and remove rows with blank values in all other columns保留一个特定列中具有空白值的行,并删除所有其他列中具有空白值的行
【发布时间】:2018-11-02 04:30:17
【问题描述】:

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

我的数据如下所示:

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 分数。由于缺少 q1 分数,参与者 003 被删除。即使参与者 004 缺少 q4 分数,我仍然希望将参与者 004 保留在数据框中。

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

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    tidyr尝试drop_na()

    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】:

      使用 complete.caseswhich 的基础 r

      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
      

      【讨论】:

        猜你喜欢
        • 2012-02-25
        • 1970-01-01
        • 2021-03-26
        • 1970-01-01
        • 2016-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多