r - R中的欧几里德距离使用矩阵中的两个变量

标签 r euclidean-distance

我是 R 的新手,我正在尝试计算矩阵中两个变量的总距离(或所有数据点的欧几里得距离之和)和净距离(第一个点和最后一个点之间的欧几里得距离)我的数据。 所以只是我数据的背景。我的数据通常是一个包含 5 个变量的 csv 文件:细胞轨迹(称为 A)、时间间隔、每个细胞的 X 和 Y 位置、V=速度。每个数据大约有 90 个轨道,每个轨道应相互独立处理。

dput(head(t1))
structure(list(A = c(0L, 0L, 0L, 0L, 0L, 0L), T = 0:5, X = c(668L, 
668L, 668L, 668L, 668L, 668L), Y = c(259L, 259L, 259L, 259L, 
259L, 259L), V = c(NA, 0, 0, 0, 0, 0)), .Names = c("A", "T", 
"X", "Y", "V"), row.names = c(NA, 6L), class = "data.frame")

之前不知道有dist()函数,所以自己做了一个函数:

GD.data <- function (trackdata)
{A= trackdata(, 1); V=trackdata(, 5);
 for (i in min(A):max(A))
   while (A<=i) {GD(i) = (sum (V)*(1/25))
                 return (GD(i))} 

这没有用。我使用 A 作为轨道的标识符,因为总距离也可以计算为: distance=velocity (t1-t0),我只是对所有速度乘以我的时间间隔求和(因为它始终是 1/25 秒。

如何使用 dist() 函数并将我的 A 作为标识符?我需要这个,因为每个轨道的计算应该是分开的。谢谢!

最佳答案

由于您以恒定的时间间隔测量速度,您可以将其相加以获得移动的总欧氏距离,实际上您可以只使用 base R函数aggregate求和 V每个轨道标识符的数据 A ,这是下面命令的作用:

aggregate( V ~ A , data = t1 , sum , na.rm = TRUE )

基本上这就是说,aggregate V 为 A 的每个值。聚合函数为 sum (你可以想象这很容易成为每个轨道的 mean 速度,使用 mean 而不是总和)。我们将一个附加参数传递给 sum这是 na.rm ,告诉它忽略数据中的 NA(我假设每个轨道的 NA 位于 t = 0)。

通过轨迹计算第一个位置和最后一个位置之间的“as the crow flies”距离:

为此我们可以 split通过轨道标识符 A 将数据帧分成子数据帧然后使用 lapply 对数据的每个子集进行操作对每个子数据帧的第一行和最后一行应用简单的斜边计算。

## Split the data
dfs <- split(t1,t1$A)

## Find hypotenuse between first and last rows for each A
lapply( dfs , function(x){
  j <- nrow(x)
  str <- x[1,c("X","Y")]
  end <- x[j,c("X","Y")]
  dist <- sqrt( sum( (end - str)^2 ) )
  return( dist )
} )

关于r - R中的欧几里德距离使用矩阵中的两个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16147692/

相关文章:

r - R 中 13 个行索引之间的欧氏距离的排列

r - 更改 ggplot geom_bar 中 NA 值的标签和颜色?

用于计算两组 2d 点之间成对距离的 Python 替代方法

Javascript对象颜色动态变化?

python - 如何在 python 中的 rpy2 中从 R 数据框中选择列?

R 用户定义的函数单独工作,但在与 apply 一起使用时返回不正确的值

python - 在 Python 中矢量化平方欧氏距离的掩码

r - 在 R 中创建多个相同(相同维度)矩阵的列表

r - Rmarkdown中的输出表宽度

r - 获取新值开始的行索引