我必须删除所有至少包含这些变量Loading Date
,year of built
,vessel type
和cargo 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
答案 0 :(得分:1)
您可以使用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'))
答案 1 :(得分:0)
如果您想使用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
。管道%>%
还可让您获得更简洁的代码!
下次,请尝试使用您的数据或一些示例数据提供可复制的示例,以便更好地理解。
答案 2 :(得分:0)
这可能适合您的情况
CW_data_noNA <- CW_data %>% drop_na()