使用过滤器功能从数据集中删除缺失值的问题

我必须删除所有至少包含这些变量Loading Dateyear of builtvessel typecargo size之一的观测值。

    anyNA(CW_data$`Loading Date`) #result is FALSE,which means there aren't missing values
    anyNA(CW_data$`Year Built`) #result is TRUE,there are missing values
    anyNA(CW_data$`Vessel Type`)#result is TRUE,there are missing values
    anyNA(CW_data$`Cargo Size`)#result is TRUE,there are missing values

    CW_data_noNA <- filter(CW_data,is.na('Year Built')==FALSE |
                   is.na('Vessel Type'==FALSE)|
                   is.na('Cargo Size')==FALSE |
                     is.na('Loading Date') == FALSE)

我尝试了上面的代码,但是结果数据集与原始代码相同。有人可以解释我做错了吗?非常感谢,LMC

wtuuser 回答:使用过滤器功能从数据集中删除缺失值的问题

您可以使用filter_at

CW_data_noNA <- filter_at(CW_data,vars('Year Built','Vessel Type','Cargo Size','Loading Date'),all_vars(!is.na(.)))

如果您想使用filter,则可以执行以下操作:

CW_data_noNA <- CW_data %>% 
                 filter(!is.na('Year Built'),!is.na('Vessel Type'),!is.na('Cargo Size'),!is.na('Loading Date'))

这将保留所有行,其中四列都不是NA。 在filter内部,总是使用&来连接各种条件。

如果您想保留不是所有四列都为NA的那一行,请使用:

W_data %>% 
   filter(!is.na('Year Built') | !is.na('Vessel Type') |
          !is.na('Cargo Size') | is.na('Loading Date'))
,

如果您想使用filter,可以这样做:

CW_data_noNA <- CW_data %>% 
    filter(!is.na(`Year Built`) & !is.na(`Vessel Type`) &
           !is.na(`Cargo Size`) & !is.na(`Loading Date`)
           )

当您在列中使用奇怪的名称时,您需要使用反引号``。通常,我认为最好避免为列名使用空格。

关于您提供的代码,is.na已经返回逻辑,因此您可以使用!is.na代替is.na() == FALSE。管道%>%还可让您获得更简洁的代码!

下次,请尝试使用您的数据或一些示例数据提供可复制的示例,以便更好地理解。

,

这可能适合您的情况

CW_data_noNA <- CW_data %>% drop_na()
本文链接:https://www.f2er.com/3139028.html

大家都在问