【发布时间】:2021-08-09 02:01:43
【问题描述】:
我有这个小标题/数据框:
library(tidyverse)
df <- tibble(
a = c(FALSE, FALSE, FALSE, TRUE),
b = c(FALSE, TRUE, TRUE, FALSE),
c = c(FALSE, FALSE, TRUE, FALSE)
)
# A tibble: 4 x 3
a b c
<lgl> <lgl> <lgl>
1 FALSE FALSE FALSE
2 FALSE TRUE FALSE
3 FALSE TRUE TRUE
4 TRUE FALSE FALSE
第一个 TRUE 我的意思是:
职位:
距离:
# A tibble: 4 x 3
a b c
<dbl> <dbl> <dbl>
1 0 1 2
2 1 2 3
3 2 3 4
4 3 4 5
从c(2, 2) 到c(1,1) 的距离为两步(向左一步)(距离 = 2),因此每个单元格与 c(1, 1) 的距离。距离最小的第一个 TRUE 是第一个 TRUE,因此本例中所需的输出是 c(2,2);当您有两个或多个单元格首先具有相等距离的 TRUE 时,您将它们放在一个列表中,结果类似于 list(c(1, 2), c(4, 3))。我想这叫做曼哈顿距离。
【问题讨论】:
-
您的意思是第二种情况所需的输出是
list(c(2, 3), c(3, 2))。第一个TRUE位置不应该总是只有 1 个位置吗?返回c(2, 3)和c(3, 2)的逻辑是什么? -
它们与
c(1,1)的距离相同 -
在第一种情况下,
c(2,2)离c(1,1)最近 -
你如何计算距离?你怎么知道哪个是最近的?
-
但是对于第 1 行和第 3 列,c(1, 3) 是“任何行或列中的第一个 TRUE”; c(2, 2) 是第 2 行和第 2 列的第一个 TRUE; c(3, 1) 是第 3 行和第 3 列的第一个 TRUE。