我的data.frame Calculations
结构如下:
head(Calculations)
Name x y Sample Time
1 Thomas 26.6627 -12.3782 1 0.01
2 Thomas 26.6564 -12.3711 2 0.02
3 Thomas 26.6497 -12.3635 3 0.03
4 Caitlin 28.6423 -14.3555 1 0.01
5 Caitlin 28.6353 -14.3472 2 0.02
6 Caitlin 28.6269 -14.3385 3 0.03
其中SampleRate <- 100
和k <- as.integer(SampleRate)
而m_velocity<- matrix(NA, length(Calculations$x))
我希望运行以下while循环来计算一段时间内的速度:
attach(Calculations)
i <- 2
while(i < length(x) - k){
m_velocity[i] <- sqrt(sum((x[i] - x[i-1]) ^2, (y[i] - y[i-1]) ^2)) / (1/SampleRate)
i <- i+1
}
但是,每个Name
都不会重新启动。例如,Caitlin的第一个速度条目是NA,而不是根据Thomas的X和Y坐标计算的。
已更新 我使用以下代码获取Velocity:
Calculations %>%
arrange(Name) %>%
group_by(Name) %>%
mutate(Velocity = sqrt( (x - lag(x) )^2 + (y - lag(y) )^2 ) * SampleRate)
但是,当我使用Sample
检查每个Name
的{{1}}的第一个条目时,仍然会根据前一个人的X和Y坐标来计算速度。有什么建议吗?
解决
我的问题源于首次加载ddply(Calculations,.(Name),function(x) head(x,1))
然后dplyr
,这会产生here所述的问题。
答案 0 :(得分:3)
您可以在没有while循环的情况下执行此操作。
library(dplyr)
calculations %>%
group_by(Name) %>%
mutate(velocity = sqrt( (x - lag(x) )^2 + (y - lag(y) )^2 ) * SampleRate)