对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))
,那么值将不同。我想,我可以对其他操作执行相同的操作。谢谢。我想,我可以为其他的手术做同样的事情。谢谢