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

R语言中对多列应用多if-else条件生成新列的实现方法

R 实现(基于dplyr)

首先构造示例数据集:

df <- data.frame(
  Column1 = c(3, 2, 1, NA, 2, NA),
  Column2 = c(3, 3, NA, 4, NA, NA),
  Column3 = c(1, 2, 2, 1, NA, NA)
)

按照优先级判断规则计算Column4:

library(dplyr)

df <- df %>%
  rowwise() %>%
  mutate(
    # 统计每行三列的非NA数量
    non_na_num = sum(!is.na(c(Column1, Column2, Column3))),
    Column4 = case_when(
      # Column1和Column2都非NA时,走条件1、2
      !is.na(Column1) & !is.na(Column2) ~ ifelse(Column1 == Column2, Column1, 5),
      # 三列全NA走条件5
      non_na_num == 0 ~ NA_real_,
      # 仅1个非NA走条件4
      non_na_num == 1 ~ na.omit(c(Column1, Column2, Column3))[1],
      # 剩余场景(Column1/2存在NA、非NA数≥2)走条件3取Column3
      TRUE ~ Column3
    )
  ) %>%
  ungroup() %>%
  select(-non_na_num)

Python 实现(基于pandas)

构造示例数据集:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Column1': [3, 2, 1, np.nan, 2, np.nan],
    'Column2': [3, 3, np.nan, 4, np.nan, np.nan],
    'Column3': [1, 2, 2, 1, np.nan, np.nan]
})

自定义行逻辑函数计算Column4:

def get_column4(row):
    c1, c2, c3 = row['Column1'], row['Column2'], row['Column3']
    # 处理Column1、Column2都非空的场景
    if pd.notna(c1) and pd.notna(c2):
        return c1 if c1 == c2 else 5
    # 统计当前行非空值数量
    non_na_cnt = sum(pd.notna([c1, c2, c3]))
    # 全空返回NA
    if non_na_cnt == 0:
        return np.nan
    # 仅1个非空返回该值
    if non_na_cnt == 1:
        return [x for x in [c1, c2, c3] if pd.notna(x)][0]
    # 其余场景返回Column3
    return c3

df['Column4'] = df.apply(get_column4, axis=1)

两种实现运行后得到的结果和预期输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:39:01