r - R - 根据其他 3 列中的 NA 有条件地创建新列
问题描述
我有一个包含 Estuarine、Freshwater 和 Marine 列的数据集。我想根据其他列中的 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,即使它们在淡水或河口有 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"))
推荐阅读
- java - 如何使用 primefaces 和 jsf 在数据表上显示目录中的文件?
- kubernetes - Kubernetes Ingress 控制器与 kube-proxy
- reactjs - 在 react js 中使用 ZeroMQ/ZMQ 订阅数据
- angularjs - 在 API 中上传文件会导致错误 400
- sql - 使用别名会导致一些无效的标识符
- python-3.x - 如何在 Python 中为 ThreadPoolExecutor 线程赋予不同的名称
- maven - Cucumber-java-maven:是否可以为测试类中定义的标签添加标签?
- sql - 不计算sql server中列值是否为0
- c# - Parallelize without Task.Run()
- post - 在 xamarin 表单中使用 api [POST] - 序列化返回空 json 对象