簡體   English   中英

如何刪除指定列中包含 NA 的行?

[英]How to drop rows containing NA in specified columns?

我有一個這樣的 dataframe

      dep_delay  temp  humid wind_dir precip pressure  date
16983  3         68.00 53.06 NA       0      1020.8    2013-05-07 

26477  42        NA  64.93 360      0        NA        2013-03-07
...
29299  -1        NA    NA    NA       NA     NA        2013-12-31 

29300  33        NA    NA    NA       NA     NA        2013-12-31 

我只想刪除像 29299 和 29300 這樣的行,它們包含從溫度到壓力的 5 個NA (這些是連續的列),並保留像 16983 和 26477 這樣的行。

期望的結果:

      dep_delay  temp  humid wind_dir precip pressure  date
16983  3         68.00 53.06 NA       0      1020.8    2013-05-07 

26477  42        NA  64.93 360      0        NA        2013-03-07

換句話說,問題是如何只刪除連續至少有 5 個NA的行。

顯然這不是正確的方法:

df <- df[!is.na(df$temp:df$pressure),]

根據 Yacine Jajji 評論更新。

您可以在dplyr package 中使用標准filter function。您設置的列數永遠不應為NA 在您的情況下有2dep_delaydate 然后計算每行中的NA數量,如果數字等於5 ,則該行將被過濾掉。 請參閱下面的代碼:

df <- read.table( text = "dep_delay  temp  humid wind_dir precip pressure  date
16983  3         68.00 53.06 NA       0      1020.8    2013-05-07 
26477  42        NA  64.93 360      0        NA        2013-03-07
29299  -1        NA    NA    NA       NA     NA        2013-12-31 
29300  33        NA    NA    NA       NA     NA        2013-12-31")

library(dplyr)

cols_to_remove <- c("temp", "humid", "wind_dir", "precip", "pressure")
df[rowSums(is.na(df[, cols_to_remove])) != 
     ncol(df[, cols_to_remove]), ]

Output:

      dep_delay temp humid wind_dir precip pressure       date
16983         3   68 53.06       NA      0   1020.8 2013-05-07
26477        42   NA 64.93      360      0       NA 2013-03-07

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM