Удаление 0 значений из матрицы в R - PullRequest
0 голосов
/ 11 января 2020

Итак, у меня есть матрица, которая была сгенерирована с использованием функции distm (), чтобы сгенерировать расстояние между станциями в датируемом файле и применить минимальное расстояние каждой станции к новому датируемому, но потому что она также сравнивает каждую станцию ​​с самим собой. 0 как минимальное значение для каждой строки в матрице. Поэтому я ищу способ избавиться от 0.

Вот то, что я использовал для генерации матрицы:

library(geosphere)

mDis = distm( nStnData[,c("Longitude", "Latitude")], nStnData [,c("Longitude", "Latitude")], fun = distVincentyEllipsoid)

Вот как я пытаюсь применить минимальное расстояние для каждой станции к новому источнику данных:

t$minDistance = apply(mDis, 1, min)

Это то, что он экономит: 1

Ответы [ 2 ]

1 голос
/ 11 января 2020

Вы можете установить нулевые значения на Inf и взять минимум полученного вектора. Это можно сделать без создания дополнительной матрицы. Определите анонимную функцию в вызове apply, чтобы сделать это.

Я буду использовать первый пример в ?distm, поскольку у вопроса нет воспроизводимого примера, который мы можем скопировать и вставить в сеанс R.

library(geosphere)

xy <- rbind(c(0,0),c(90,90),c(10,10),c(-120,-45))
mDis <- distm(xy)

apply(mDis, 1, function(x){
  x[x == 0] <- Inf
  min(x)
})
#[1]  1565109  8896111  1565109 12317881
0 голосов
/ 11 января 2020

Вы можете попытаться вычислить второе наименьшее значение.

apply(mDis,1, function(x)sort(x)[2])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...