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

R语言数据框基于多列值变化新增存储首次变化列名的Switch列

实现逻辑

  • 按行遍历所有列的取值,以该行第一列的数值为基准值
  • 从第二列开始依次和基准值做比较,找到第一个取值和基准值不同的列,返回对应列名
  • 若该行所有列取值都和基准值一致,返回NA

实现代码

Base R 版本

# 原始数据
DF <- data.frame(Col1=c(0,0,1),Col2=c(0,1,1),Col3=c(1,0,1))

# 新增Switch列
DF$Switch <- apply(DF, 1, function(row) {
  base_val <- row[1]
  # 定位第一个和基准值不同的列位置(跳过第一列)
  diff_idx <- which(row[-1] != base_val)[1]
  # 存在差异则返回对应列名,否则返回NA
  ifelse(is.na(diff_idx), NA_character_, names(row)[diff_idx + 1])
})

dplyr 版本

library(dplyr)

DF <- DF %>%
  rowwise() %>%
  mutate(Switch = {
    row_vals <- c_across(everything())
    base_val <- row_vals[1]
    diff_idx <- which(row_vals[-1] != base_val)[1]
    ifelse(is.na(diff_idx), NA_character_, names(row_vals)[diff_idx + 1])
  }) %>%
  ungroup()

运行后输出结果和预期一致:

Col1Col2Col3Switch
001Col3
010Col2
111NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:57:02