我有一个列为"河口"、"淡水"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"))