R语言如何查找dataframe中距离左上角曼哈顿距离最小的TRUE值位置
R实现查找曼哈顿距离最小的TRUE单元格坐标
实现逻辑
你需求的曼哈顿距离计算公式为 (行索引 - 1) + (列索引 - 1),实现步骤如下:
- 提取所有值为TRUE的单元格的行列索引
- 批量计算每个TRUE单元格的曼哈顿距离
- 筛选出距离最小的所有坐标
- 转换为要求的列表格式返回
完整代码
library(tidyverse) # 你的示例数据 df <- tibble( a = c(FALSE, FALSE, FALSE, TRUE), b = c(FALSE, TRUE, TRUE, FALSE), c = c(FALSE, FALSE, TRUE, FALSE) ) # 核心实现函数 get_min_dist_true_pos <- function(df) { # 获取所有TRUE的行列索引 true_pos <- as.data.frame(which(df == TRUE, arr.ind = TRUE)) # 计算曼哈顿距离 true_pos$dist <- (true_pos$row - 1) + (true_pos$col - 1) # 筛选最小距离的坐标 min_pos <- true_pos[true_pos$dist == min(true_pos$dist), c("row", "col")] # 转换为要求的列表格式 unname(apply(min_pos, 1, c, simplify = FALSE)) } # 调用函数得到结果 result <- get_min_dist_true_pos(df) print(result)
输出结果
用你提供的示例数据运行后,输出为:
[[1]] row col 2 2
即返回结果为list(c(2,2)),符合预期。如果存在多个相同最小距离的TRUE单元格,会自动在列表中追加对应的坐标向量。
内容的提问来源于stack exchange,提问作者Alvaro Morales
相关产品推荐
相关产品推荐

