如何在R中对DataFrame第3行数值做±0.2误差范围的等值比较
问题解决方案
你原代码的核心问题是采用了精确等值判断,同时存在列名输出的索引错误,按以下方式修改即可得到预期结果:
核心修改点
- 将精确等值判断
==替换为abs(值1 - 值2) <= 0.2,满足±0.2误差范围内判定为相等的逻辑 - 修正原代码中第二个列名输出时误用i索引的问题,避免输出两个相同列名
- 单独提取数值列处理,避免误操作第一列的NAME字符串字段
可运行代码示例
首先构造和你结构一致的示例DataFrame:
data <- data.frame( NAME = c("first", "second", "third", "four"), A = c(3, 1, 7, 2), B = c(2, 2, 7.1, 1), C = c(4, 3, 7.5, 0), D = c(5, 4, 6.9, 5) )
修改后的判断逻辑:
# 提取A-D对应的数值列索引、列名 num_col_idx <- 2:5 num_col_names <- colnames(data)[num_col_idx] # 遍历所有列组合做近似判断 for (i in 1:(length(num_col_idx)-1)) { for (j in (i+1):length(num_col_idx)) { if (abs(data[3, num_col_idx[i]] - data[3, num_col_idx[j]]) <= 0.2) { print(paste("the column", num_col_names[i], "and", num_col_names[j], "are equal")) } } }
运行输出
[1] "the column A and B are equal" [1] "the column A and D are equal"
完全符合你的预期输出要求。
内容的提问来源于stack exchange,提问作者Reda
相关产品推荐
相关产品推荐

