如何用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
相关产品推荐
相关产品推荐

