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

在R中实现查找与指定行属性匹配或相近的数据行

R实现匹配参考行的筛选函数

我们可以通过以下逻辑实现需求:提取指定参考行,区分数据框中的分类列与数值列,分别构建匹配条件后组合筛选,同时排除参考行本身。

完整代码如下:

# 加载并预处理数据
data <- read.csv("https://raw.githubusercontent.com/hkil/m/master/wcf.csv")[-c(2:6,12,17)]

# 实现筛选函数
foo <- function(data = data, reference_row = 116, tolerance_for_numerics = 3) {
  # 提取参考行:兼容行号或直接传入行数据
  if (is.numeric(reference_row)) {
    ref <- data[reference_row, , drop = FALSE]
  } else {
    ref <- reference_row
  }
  
  # 自动区分分类列(字符/因子型)和数值列(整数/数值型)
  col_types <- sapply(data, function(x) class(x)[1])
  cat_cols <- names(col_types[col_types %in% c("character", "factor")])
  num_cols <- names(col_types[col_types %in% c("integer", "numeric")])
  
  # 构建分类列的完全匹配条件
  cat_conditions <- lapply(cat_cols, function(col) {
    data[[col]] == ref[[col]]
  })
  
  # 构建数值列的公差范围内匹配条件
  num_conditions <- lapply(num_cols, function(col) {
    abs(data[[col]] - ref[[col]]) <= tolerance_for_numerics
  })
  
  # 合并所有条件并排除参考行本身
  all_conditions <- Reduce(`&`, c(cat_conditions, num_conditions))
  all_conditions[reference_row] <- FALSE
  
  # 返回筛选结果
  data[all_conditions, , drop = FALSE]
}

# 使用示例
result <- foo()
print(result)

代码说明

  • 参考行兼容处理:既支持传入行号,也支持直接传入参考行数据,提升函数灵活性
  • 自动列类型识别:无需手动指定列类型,函数自动区分分类列与数值列
  • 条件逻辑:
    • 分类列要求与参考行对应值完全一致
    • 数值列要求与参考行对应值的差值绝对值不超过设定公差
  • 排除参考行:确保结果仅包含符合条件的其他行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:18:29