【问题标题】:Remove NAs from dataframe except in one column R从数据框中删除 NA,但在一列 R 中除外
【发布时间】:2016-10-01 10:41:46
【问题描述】:

我有一个数据框:

column1 <- c(400, 500, 350, 70, NA, NA, 500, 350, 70)
column2 <- c(NA, 67, 23, 45, 78, 123, 54, 123, 898)
column3 <- c(412, 4, 5, 6, 1, 689, 90, 12, NA)
column4 <- c("IMC", "VMC", NA, NA, NA, NA, "IMC", "VMC", "IMC")
data1 <- data.frame(column1, column2, column3, column4)

看起来像这样:

column1  column2  column3  column4
400      NA       412      IMC
500      67       4        VMC
350      23       5        NA
70       45       6        NA
NA       78       1        NA
NA       123      689      NA
500      54       90       IMC
350      123      12       VMC
70       898      NA       IMC

问题:是否可以从第 1、2 和 3 列中删除具有 NA 的行,但不能从第 4 列中删除?所以我的输出将如下所示:

column1  column2  column3  column4
500      67       4        VMC
350      23       5        NA
70       45       6        NA
500      54       90       IMC
350      123      12       VMC

我已经为此苦苦挣扎了一段时间。谢谢!

【问题讨论】:

    标签: r na


    【解决方案1】:

    您可以在前三列使用complete.cases(),然后使用subset

    data1[complete.cases(data1[, 1:3]), ]
      column1 column2 column3 column4
    2     500      67       4     VMC
    3     350      23       5    <NA>
    4      70      45       6    <NA>
    7     500      54      90     IMC
    8     350     123      12     VMC
    

    【讨论】:

    • 感谢您的回答!我还有一个问题:如果我想从第 1、2 和 4 列中删除带有 NA 的行,而不是从第 3 列中删除,该怎么办? (在这种情况下我可以使用data1[complete.cases(data1[, 1,2,4]), ] 吗?
    • data1[complete.cases(data1[, c(1, 2, 4)]), ] 应该没问题。您需要将列选择指定为向量,这就是 c 的来源。
    【解决方案2】:

    library(dplyr) 方法:

    data1 %>% filter(complete.cases(.[,-4]))
    

    data1 %>% filter(complete.cases(.[,-3]))
    

    如果您想在第 3 列中保留 NA

    【讨论】:

      【解决方案3】:

      这是一个使用data.table 的选项,通过指定.SDcols 中的列

      library(data.table)
      setDT(data1)[data1[, complete.cases(.SD), .SDcols = column1:column3]]
      #   column1 column2 column3 column4
      #1:     500      67       4     VMC
      #2:     350      23       5      NA
      #3:      70      45       6      NA
      #4:     500      54      90     IMC
      #5:     350     123      12     VMC
      

      【讨论】:

        猜你喜欢
        • 2022-09-22
        • 1970-01-01
        • 1970-01-01
        • 2021-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-04
        相关资源
        最近更新 更多