Search code examples
rdataframenadelete-row

Is there R syntax to delete rows with specific, multiple NAs in columns?


Hello coding community,

If my data frame looks like:

ID     Col1 Col2 Col3 Col4
Per1   1    2    3    4
Per2   2    NA   NA   NA
Per3   NA   NA   5    NA

Is there any syntax to delete the row associated with ID = Per2, on the basis that Col2, Col3, AND Col4 = NA? I am hoping for code that will allow me to delete a row on the basis that three specific columns (Col2, Col3, and Col4) ALL are NA. This code would NOT delete the row ID = Per3, even though there are three NAs.

Please note that I know how to delete a specific row, but my data frame is big so I do not want to manually sort through all rows/columns.

Big thanks!


Solution

  • Test for NA and delete rows with a number of NA's equal to the number of columns tested using rowSums.

    dat[!rowSums(is.na(dat[c('Col2', 'Col3', 'Col4')])) == 3, ]
    #     ID Col1 Col2 Col3 Col4
    # 1 Per1    1    2    3    4
    # 3 Per3   NA   NA    5   NA