对R中向量的连续行的操作

对R中向量的连续行的操作,r,R,我不知道如何用更好的方式表达它。这是我的问题 一个非常简单的数据框架,比如-- 现在,我想添加两个连续时间帧(第一行除外)之间的距离(作为另一列)。例如,在time==2时,距离应计算为sqrt((2-0)*(2-0)+(0-0)*(0-0))。一个可能的结果可能是这样的 df= {"time" "east" "north" "distance" 1 0 0 0 2 2 0

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

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

现在,我想添加两个连续时间帧(第一行除外)之间的距离(作为另一列)。例如,在
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
     }
当然,我想有一个方法来获得从两个连续的行中向东和向北的距离,并返回点之间的欧几里得距离。 1)如何实现数据帧中两个连续点之间的距离?

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

index = length(df$time)-1
segments( df$time[index],df$time[index+1], df$distance[index], df$distance[index+1] )
2)有没有更好的方法从连续点绘制线段?类似的指针也非常有用

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 ) ]
应该实现你的目标。
shift
函数采用给定行数的值偏移量<代码>滞后意味着它将向上看(
领先
将向下看)

我还在
shift
调用中添加了
fill=0
。这为无法执行
shift
功能的单元格指定一个值(在本例中为第1行)。通过将该值设为零,可以有效地将“起始”点指定为0,因此即使第一行也可以有一个距离,它将只是从该零点开始,而不是从它上面的任何单元格开始

应该实现你的目标。
shift
函数采用给定行数的值偏移量<代码>滞后意味着它将向上看(
领先
将向下看)


我还在
shift
调用中添加了
fill=0
。这为无法执行
shift
功能的单元格指定一个值(在本例中为第1行)。通过将该值设为零,可以有效地将“起始”点指定为0,因此即使第一行也可以有一个距离,它将仅与零点相距,而不是与零点上方的任何单元格相距。

我们可以使用
dplyr

library(dplyr)
df %>%
   mutate(distance = sqrt((east - lag(east, default = 0))^2 + 
                   (north - lag(north, default = 0))^2))
#    time east north distance
#1    1    0     0        0
#2    2    2     0        2
#3    3    1     0        1
#4    4    1     2        2

我们可以使用
dplyr

library(dplyr)
df %>%
   mutate(distance = sqrt((east - lag(east, default = 0))^2 + 
                   (north - lag(north, default = 0))^2))
#    time east north distance
#1    1    0     0        0
#2    2    2     0        2
#3    3    1     0        1
#4    4    1     2        2

你需要什么还不清楚。如果您包括预期的输出…谢谢,我也添加了一个可能的输出。根据您的计算,
使用(df,sqrt((东北)^2+(滞后(东)-滞后(北))^2))
,则值将不同。不清楚您需要什么。如果您包括预期的输出…谢谢,我也添加了一个可能的输出。根据您的计算,
使用(df,sqrt((东北)^2+(滞后(东)-滞后(北))^2))
,那么值将不同。我想,我可以对其他操作执行相同的操作。谢谢。我想,我可以为其他的手术做同样的事情。谢谢