You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中对data.frame多列应用OR运算且正确保留缺失值的方案

R 自定义OR运算处理NA的最优实现

基础R向量化实现(无需第三方包)

你原来的思路是对的,但可以用rowSums替换逐行apply,运算效率更高,代码也更简洁:

myOR <- function(df) {
  # 存在1则标记为1,无1则标记为0
  res <- as.numeric(rowSums(df == 1, na.rm = TRUE) > 0)
  # 所有值均为NA的行替换为NA
  res[rowSums(is.na(df)) == ncol(df)] <- NA
  return(res)
}

测试输出完全匹配你的预期:

myOR(df)
#  [1]  0  1  0  1  1  1  0  1  0  1  1  1  1  1  1  1  1  1  0  1  0  1  1  1  0  1 NA

更易读的dplyr实现

如果你已经在项目中使用tidyverse栈,可以用dplyr 1.0.0及以上版本内置的if_any/if_all函数,可读性更强:

library(dplyr)

df <- df %>% 
  mutate(
    xyz = as.numeric(if_any(everything(), ~.x == 1)),
    # 全NA行替换为NA
    xyz = ifelse(if_all(everything(), is.na), NA, xyz)
  )

避免重复复制代码的方案

  • 把上述函数写入你本地的~/.Rprofile配置文件,每次启动R会话会自动加载,可直接调用
  • 把常用工具函数打包成个人R包,本地安装后全环境可用

内容的提问来源于stack exchange,提问作者kimena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:27:04