R 中向量的连续行的运算

nov*_*ice 0 r

我不知道如何用更好的方式表达它。这是我的问题。

一个非常简单的数据框,比如——

 df= {"time"   "east"   "north"   
         1      0      0
         2      2      0
         3      1      0
         4      1      2 
     }
Run Code Online (Sandbox Code Playgroud)

现在,我想添加两个连续时间范围(第一行除外)之间的距离(作为另一列)。例如,time==2距离应计算为sqrt( (2-0)*(2-0) + (0-0)*(0-0) )。可能的结果可能是这样的

 df= {"time"   "east"   "north"  "distance"   
         1       0        0         0
         2       2        0         2
         3       1        0         1
         4       1        2         2
     }
Run Code Online (Sandbox Code Playgroud)

当然,我想要一种方法来获取从连续两行向东和向北的距离,并返回点之间的欧几里德距离。 1)如何获得数据框中两个连续点之间的距离?

我想对巨大数据帧的子集应用类似的操作或可配置函数(距离、连续减法等)。最后我想绘制一些片段,例如

index = length(df$time)-1
segments( df$time[index],df$time[index+1], df$distance[index], df$distance[index+1] )
Run Code Online (Sandbox Code Playgroud)

2)是否有更好的方法来绘制连续点的线段?类似这样的指针也将非常有用。

ros*_*ova 5

library( data.table )
setDT( df )[ , distance := sqrt( ( east - shift( east, 1, type = "lag", fill = 0 ) ) ^ 2 +
                        ( north - shift( north, 1, type = "lag", fill = 0 ) ) ^ 2 ) ]
Run Code Online (Sandbox Code Playgroud)

应该能达到你所追求的目标。该shift函数采用按给定行数偏移的值。lag意味着它会向上看(lead会向下看)。

我也加入fill = 0了通话shiftshift这指定了无法执行该函数的单元格的值(在本例中为第 1 行)。通过将该值设置为零,您实际上指定了 0 的“起始”点,因此即使第一行可以有一定距离,它也只是距零点,而不是其上方的任何单元格。