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

如何用R比较两列值:相等保留原值、不等行求和并标记差异

解决方法

1. Base R 实现

先加载你的示例数据(实际使用时替换为自己的数据框即可):

df <- structure(list(colA = c(0, 0, 0, 412.99, 34.43, 117.36, 193.05, 
305.22), colB = c(0, 0, 0, 412.99, 6.89, 0, 193.05, 305.22)), class = "data.frame", row.names = c(1323L, 
5426L, 2772L, 7241L, 2547L, 874L, 5908L, 6830L))

直接通过原生语法添加目标列,无需额外安装包,处理10000+行数据效率足够:

# 生成标记列colD:判断两列值是否相同
df$colD <- df$colA == df$colB

# 生成计算列colC:值相同时保留原值,不同时求和
df$colC <- ifelse(df$colD, df$colA, df$colA + df$colB)

2. dplyr 实现(tidyverse 风格)

如果习惯使用tidyverse生态的语法,代码可读性更强,适合后续扩展多列操作:

library(dplyr)

df <- df %>%
  mutate(
    colD = colA == colB,
    colC = case_when(
      colD ~ colA,
      TRUE ~ colA + colB
    )
  )

关键注意事项

  • 浮点数值比较:如果你的数据是浮点型,直接用==可能因精度问题出现误判,建议改用误差范围判断:
# Base R 方式
df$colD <- abs(df$colA - df$colB) < 1e-6

# dplyr 方式
df <- df %>% mutate(colD = near(colA, colB, tol = 1e-6))
  • 实际使用时,将代码中的colA和colB替换为你需要比较的具体列名即可,其他列不会被修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:42:39