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

如何用Base-R逐行识别多列中值不同的列并写入结果列?

Base-R 快速实现逐行找出数值不同的列名

针对你的需求,用Base-R可以通过apply函数结合简单逻辑判断快速实现,无需额外依赖包。以下是具体代码和步骤:

首先是你的示例数据框:

df <- data.frame(
  colA = as.integer(c(1,-1,1,1,-1)),
  colB = as.integer(c(-1,1,1,-1,1)),
  colC = as.integer(c(1,1,1,-1,-1)),
  colD = as.integer(c(1,1,-1,-1,-1))
)

接下来逐行处理,找出每行中数值与其他列不同的列名:

# 给数据框新增results列
df$results <- apply(df, 1, function(row) {
  # 获取该行出现次数最多的数值(即其他列的共同值)
  common_val <- names(sort(table(row), decreasing = TRUE))[1]
  # 筛选出值不等于共同值的列名
  names(row)[row != common_val]
})

执行后查看结果,完全符合预期:

print(df)
#   colA colB colC colD results
# 1    1   -1    1    1    colB
# 2   -1    1    1    1    colA
# 3    1    1    1   -1    colD
# 4    1   -1   -1   -1    colA
# 5   -1    1   -1   -1    colB

补充说明

  • 这个方法默认每行只有一个列的数值与其他列不同(和你的示例场景匹配),如果存在多行有多个不同值的情况,results列会返回包含多个列名的向量。
  • apply是Base-R的核心函数,处理中小规模数据时效率足够,无需额外安装扩展包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:10:54