按值子集 R 中的距离矩阵

Subset a distance matrix in R by values

我有一个非常大的距离矩阵 (3678 x 3678) 当前编码为数据帧。列命名为“1”、“2”、“3”等,行也是如此。因此,我需要做的是找到 <26 且不同于 0 的值,并将结果放在具有两列的第二个数据框中:第一个具有索引,第二个具有值。例如:

            value
318-516   22.70601
... 

其中 318 是行索引,516 是列索引。

好的,我正在尝试重现您的情况(注意:如果可以的话,使用 dput 命令包含几行数据总是有帮助的)。

您应该能够使用 filter 和一些简单的 tidyverse 命令(如果您不知道它们是如何工作的,运行 一行一行地使用它们,始终选择 %>% 检查他们在做什么):

library(tidyverse)
library(tidylog) # gives you additional output on what each command does
# Creating some data that looks similar
data <- matrix(rnorm(25,mean = 26),ncol=5)
data <- as_tibble(data)
data <- setNames(data,c(1:5))

data %>% 
  mutate(row = row_number()) %>% 
  pivot_longer(-row, names_to = "column",values_to = "values", names_prefix = "V") %>% 
  # depending on how your column names look like, you might need to use a separate() command first
  filter(values > 0 & values < 26) %>% 
  
  # if you want you can create an index column as well
  mutate(index = paste0(row,"-",column)) %>% 
  
  # then you can get rid of the row and column
  select(-row,-column) %>% 
  # move index to the front
  relocate(index)