繁体   English   中英

R中向量的连续行的运算

[英]operations to consecutive rows of a vector in R

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

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

 df= {"time"   "east"   "north"   
         1      0      0
         2      2      0
         3      1      0
         4      1      2 
     }

现在,我想添加两个连续时间帧(第一行除外)之间的距离(作为另一列)。 例如,在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函数将值偏移给定的行数。 lag意味着它将向上看( lead将向下看)。

我也将fill = 0添加到shift调用中。 这为无法执行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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM