У меня есть эта табличка/фрейм данных:
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
под первым ИСТИНА я имею в виду:
позиции:
расстояния:
# 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)
. Первое значение ИСТИНА с минимальным расстоянием является первым значением ИСТИНА, поэтому желаемый результат в этом примере — 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)
Как рассчитать расстояние? Как узнать, какой из них ближе?
Но c(1, 3) является «первым ИСТИННЫМ в любой строке или столбце» для строки 1 и для столбца 3; c(2, 2) первое значение TRUE для строки 2 и столбца 2; и c(3, 1) является первым TRUE для строки 3 и столбца.
Или вы имеете в виду ближайший к c (1, 1) как на минимальном расстоянии:
sqrt((row(df) - 1)^2 + (col(df) - 1)^2)
.Мой плохой, я не объяснил себя лучше, я обновил пост. Да @dcarlson
НО c(3, 1 ) тоже 2 шага, всего 2 шага по горизонтали. Однако это всего 1,4 единицы, тогда как с (3, 1) составляет 2 единицы.
c(3, 1)
равноFALSE
, поэтому не считается.Путаница здесь заключается в том, хотите ли вы ТОЛЬКО расстояние от c (1,1) до ближайшего TRUE или вам нужен алгоритм, который определяет расстояние от любой позиции до ближайшего TRUE.
Кроме того, как правило, этот сайт не предназначен для того, чтобы придумывать для вас алгоритмы. Для этого есть другие сайты. См. справку о том, что считается хорошим вопросом для этого сайта.