R-根据其他3列中的NA有条件地创建新列



我有一个列为"河口"、"淡水"one_answers"海洋"的数据集。我想根据其他列中的NA数量创建Status列:

Brackish Freshwater Marine  Status
1         NA         1       Marine_Estuarine
1         1          1       Marine_Estuarine_Freshwater
NA        NA         1       Marine_Only
NA        1          1       Marine_Freshwater

我试着写这段代码来有条件地填充列,但我遇到了一个错误,大多数行都被标记为Marine_Only,即使它们在Freshwater或Estuarine中有1。我认为""将限制Marine_Only在河口和淡水与NAs划船。

library(dplyr)
df<-df %>%
mutate(Status = case_when(
is.na(df$brackish & df$freshwater) ~ "Marine_Only",
!is.na(df$brackish & df$freshwater) ~ "Marine_Estuarine_and_Freshwater",
!is.na(df$brackish) ~ "Brackish",
!is.na(df$freshwater) ~ "Freshwater"))

假设列名是正确的。is.na可以分别应用于每列,然后执行&而不是brackish & freshwater。后者对于>0,即

> 1 & 2
[1] TRUE
> 0 & 2
[1] FALSE

使用上面描述的逻辑,创建如下所示的复合逻辑表达式

df <- df %>%
mutate(Status = case_when(
is.na(brackish) & is.na(freshwater) ~ "Marine Only",
!is.na(brackish) & !is.na(freshwater)
~ "Marine_Estuarine_and_Freshwater",
!is.na(brackish) ~ "Brackish",
!is.na(freshwater) ~ "Freshwater"))

最新更新