考虑while循环中变量的变化

时间:2015-11-19 03:23:03

标签: r

我的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 <- 100k <- 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所述的问题。

1 个答案:

答案 0 :(得分:3)

您可以在没有while循环的情况下执行此操作。

library(dplyr)

calculations %>%
  group_by(Name) %>%
  mutate(velocity = sqrt( (x - lag(x) )^2 + (y - lag(y) )^2 ) * SampleRate)