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

R语言跨多列忽略NA值执行条件判断生成标记列的实现方法

R脚本实现方案

首先构造测试数据框:

# 构造原始数据
x <- c(1, 1, 2, 3, 4, 5)
y <- c(1, 1, 1, 3, 4, 5)
z <- c(NA, 1, 1, 3, 4, NA)
df <- data.frame(x, y, z)

方法1:基础R实现

逐行遍历判断,逻辑直观无额外依赖:

# 生成flag1:所有非NA值均为1则标记1,否则0
df$flag1 <- apply(df, 1, function(row) {
  as.integer(all(row[!is.na(row)] == 1))
})

# 生成flag2:任意非NA值等于4则标记1,否则0
df$flag2 <- apply(df, 1, function(row) {
  as.integer(any(row[!is.na(row)] == 4))
})

方法2:tidyverse生态实现

适合日常管道流编码习惯:

library(dplyr)

df <- df %>%
  rowwise() %>%
  mutate(
    # 筛选x到z列的非NA值做全匹配判断
    flag1 = as.integer(all(c_across(x:z)[!is.na(c_across(x:z))] == 1)),
    # 筛选x到z列的非NA值做任意匹配判断
    flag2 = as.integer(any(c_across(x:z)[!is.na(c_across(x:z))] == 4))
  ) %>%
  ungroup()

输出结果验证

两种方法运行后得到的最终数据框如下,符合需求规则:

x y  z flag1 flag2
1 1 1 NA     1     0
2 1 1  1     1     0
3 2 1  1     0     0
4 3 3  3     0     0
5 4 4  4     0     1
6 5 5 NA     0     0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:30:00