[英]How to calculate the max euclidean distance between two elements in a matrix - R?
[英]Euclidean distance in R using two variables in a matrix
我是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秒)。
如何使用我的A作为标识符的dist()函数? 我需要这个,因为每个轨道的计算应该是分开的。 谢谢!
由于你有以恒定时间间隔测量的速度,你可以总结以获得移动的欧几里德总距离,你实际上只需使用base
R函数aggregate
来按每个轨道标识符A
对V
数据求和,这就是下面的命令作用:
aggregate( V ~ A , data = t1 , sum , na.rm = TRUE )
基本上,这表示, aggregate
的A的每个值V的聚合函数sum
(你能想象这很容易被mean
利用每个轨道速度mean
,而不是总和)。 我们将另一个参数传递给sum
,即na.rm
,告诉它忽略数据中的na.rm
(我假设每个轨道的t = 0
)。
按轨道计算第一个和最后一个位置之间的“乌鸦飞行”距离:
为此,我们可以通过轨道标识符A
将数据帧split
为子数据帧,然后对数据的每个子集进行操作,使用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 )
} )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.