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

基于dplyr与map实现最小差异行的id列表生成

解决方案

可以结合purrr::map和向量化的差异计算来实现,避免手动构建列表或方阵,代码更简洁且可复用:

library(tidyverse)

df <- tibble(
  A= c("x","x","y","y"),
  B= c("y","y","y","y"),
  C= c("x","y","z","y")
) %>%
  mutate(id = row_number(), .before = "A")

# 用map按行生成neighs_id
df <- df %>%
  mutate(neighs_id = map(id, ~{
    # 计算当前行与所有行在A、B、C列的差异列数
    diff_cols <- (A != df$A[.x]) + (B != df$B[.x]) + (C != df$C[.x])
    # 筛选差异恰好为1的行的id,排除自身
    df$id[diff_cols == 1 & id != .x]
    # 若需字符型列表,替换为:as.character(df$id[diff_cols == 1 & id != .x])
  }))

View(df)

逻辑说明

  • 用map遍历每一行的id,对每个行号.x,通过向量化运算计算所有行与该行在A、B、C三列的差异总和(每列值不同则加1)
  • 筛选出差异总和等于1且不是当前行自身的id,直接收集为列表列neighs_id
  • 这种向量化计算方式比逐行循环或构建全量差异方阵更高效,代码逻辑清晰且易于扩展到更多列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:09:17