R - 根据其他 3 列中的 NA 有条件地创建新列
R - Conditionally create new column based on NAs in 3 other columns
我有一个包含河口、淡水和海洋列的数据集。我想根据其他列中的 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 限制为在河口和淡水中都带有 NA 的行。
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 的任何值,即
,后者可以为 TRUE
> 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"))
我有一个包含河口、淡水和海洋列的数据集。我想根据其他列中的 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 限制为在河口和淡水中都带有 NA 的行。
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"))