从R中的矩阵中删除0值

从R中的矩阵中删除0值,r,R,因此,我有一个矩阵,它是使用distm函数生成的,用于生成数据表中站点之间的距离,并将每个站点的最小距离应用于一个新的数据表,但由于它还将每个站点与其自身进行比较,因此矩阵中每行的最小值为0。所以我在寻找摆脱0的方法 这是我用来生成矩阵的: library(geosphere) mDis = distm( nStnData[,c("Longitude", "Latitude")], nStnData [,c("Longitude", "Latitude")], fun = distVincen

因此,我有一个矩阵,它是使用distm函数生成的,用于生成数据表中站点之间的距离,并将每个站点的最小距离应用于一个新的数据表,但由于它还将每个站点与其自身进行比较,因此矩阵中每行的最小值为0。所以我在寻找摆脱0的方法

这是我用来生成矩阵的:

library(geosphere)

mDis = distm( nStnData[,c("Longitude", "Latitude")], nStnData [,c("Longitude", "Latitude")], fun = distVincentyEllipsoid)
这就是我试图将每个站点的最小距离应用于新数据表的方式:

t$minDistance = apply(mDis, 1, min)
这就是它所节省的:

您可以将零值设置为Infand,并取结果向量的最小值。这可以在不创建额外矩阵的情况下完成。在调用中定义一个匿名函数以应用它

我将使用?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

您可以尝试计算第二个最小值

apply(mDis,1, function(x)sort(x)[2])

欢迎来到SO!请花点时间阅读如何发布R示例:如果您希望最小值不为零,为什么不使用mDis2 Dude…您是最好的。成功了。告诉我你是如何学习R的。目前正在学习数据科学,需要好的资料来源来学习。@OmZPrime从R附带的文档开始,文件R-intro.pdf,并查看CRAN在其网站中的内容。这也很有效。。。但在您和Rui barradas解决方案之间,上面的解决方案速度更快。