我是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作为标识符一起使用?我需要这个,因为每个轨道的计算应该是分开的。谢谢!
答案 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