【问题标题】:How to get the position of first TRUE in any row or column of dataframe in R?如何在R中数据框的任何行或列中获取第一个TRUE的位置?
【发布时间】: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。

标签: r tidyverse


【解决方案1】:

试试这个

dst <- (row(df) - 1) + (col(df) - 1)
dst[as.matrix(!df)] <- NA
which(dst==min(dst, na.rm=TRUE), arr.ind=TRUE)
#      row col
# [1,]   2   2

结果将是一个包含 1 行或更多行的矩阵。如有必要,您可以将其转换为列表。

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 2016-12-30
    • 2016-06-11
    • 2014-04-27
    • 2021-08-26
    • 1970-01-01
    相关资源
    最近更新 更多