r - R - 以编程方式检测 NA 列并返回字符串
问题描述
我的脚本有这个符合条件的列向量
cols <- c("country", "phone", "car")
和这个dataframe
test <-
data.frame(
id = c(1, 2, 3),
country = c("us", NA, "uk"),
phone = c(1, 1, NA),
car = c(NA, 0, 1)
)
目标是使用结果创建一个新列,其中条件将仅基于 cols 变量中存在的列。如果 id 的所有值都是NA
,那么 res 应该是 string nothing,如果其中一些不是 NA,那么我需要这个colnames
,如果所有列都不是 NA 那么结果应该是 string all。
result <-
data.frame(
id = c(1, 2, 3),
country = c("us", NA, NA),
phone = c(1, 1, NA),
car = c(NA, NA, NA),
res = c("country, phone", "phone", "nothing")
)
我只能通过case_when()
函数来做到这一点
mutate(
res = case_when(
!is.na(country) & is.na(phone) & is.na(car) ~ "country",
T ~ "?"
)
解决方案
您可以dplyr
使用以下代码在 base R(而不是 )中执行此操作:
result$res <- apply(result[,cols],1, function(x){paste(cols[!is.na(x)], collapse=", ")})
result$res[results$res==""] <- "nothing"
推荐阅读
- rabbitmq - 在 RabbitMQ 中查找过去已准备好消息的队列
- spring-boot - 从 Spring Cloud 断路器弹性 4j 中的 NoFallbackAvailableException 获取响应体
- java - ConcurrentSkipListSet 如何拥有弱一致的迭代器?理解“弱一致”的含义
- c++ - 用作堆栈时,无论保留容量如何,std::vector 重新分配
- elixir - Elixir 将列表视为单个元素
- c# - 如何在统一 2d 中使用刚体约束
- vue.js - 在 nuxt 布局中使用动态组件获取运行时编译错误
- css - 与有源无线电不同的 CSS 类
- javascript - 如何用两个值动态渲染/加载我的数组?
- scala - 在 Spark RDD 上调用 map(f).sum 时,Scala REPL 无限期挂起