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

时间:2013-04-22 12:58:45

标签: 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作为轨道的标识符,因为总距离也可以计算为: 距离=速度(t1-t0),我只是对所有速度乘以我的时间间隔求和(因为它始终是1/25秒。

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

1 个答案:

答案 0 :(得分:1)

由于你有以恒定时间间隔测量的速度,你可以总结以获得移动的欧几里德总距离,你实际上只需使用base R函数aggregate求和{{1每个轨道标识符V的数据,这是以下命令的作用:

A

基本上,这表示{A}的每个值为aggregate( V ~ A , data = t1 , sum , na.rm = TRUE ) V.聚合函数为aggregate(您可以想象使用{{sum速度可以很容易地成为每个音轨的mean速度1}}而不是总和)。我们将另一个参数传递给mean sum,告诉它忽略数据中的NAs(我假设每个曲目都在na.rm)。

按照曲目计算“第一个和最后一个位置之间的距离”:

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

lapply