基于for循环将值添加到R向量

时间:2017-08-15 18:47:04

标签: r for-loop vector

我的数据框包含运输系统上的wifi下载带宽和GPS数据(经度和纬度)。我想从数据中确定车辆向北移动时的平均带宽是什么,以及向南移动时的平均带宽。

(来自df的带宽和纬度值)

bandwidth <- df$bandwidth

latitude <-df$latitude

(这些都有2800个条目)

(创建空矢量以根据车辆向北或向南移动来填充带宽值)

movingnorth <- vector('numeric')

movingsouth <- vector('numeric')

(如果火车向北移动,用带宽矢量数据填充移动的北向量)

for(y in latitude){

  if(latitude[y]>= latitude[y+1]){
  movingnorth <- c(movingnorth, received[y])}
  }

在这里,我基本上说如果纬度值上升,那么车辆向北移动,因此从该位置输入带宽值到movenorth矢量。我希望只有一部分来自带宽矢量的值被添加到movingnorth矢量,但是所有2800个值都被添加。我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

利用R的矢量化操作。首先,我们使用diff来查找latitude

的连续元素之间的变化
latitude_change <- diff(df$latitude)

现在我们有一个长度比latitude长度小1的向量。方向发生在测量之间,因此这是有道理的。假设我们不会确定第一次测量的方向。这意味着如果latitude_change[i] > 0,那么火车的北行时间为i - 1

df$movingnorth <- c(FALSE, latitude_change > 0)

我保留df的这一部分因为它是相关的信息,所以桌子是它的最佳位置。

答案 1 :(得分:0)

正如lmo所说,你想使用seq_along(latitude)1:length(latitude),它会返回索引而不是latitude中的实际元素。

此外,您可能需要仔细检查latitude[y+1]是否正确。当前语法假定数据中纬度值的顺序从最新到最旧。从您提供的信息中无法确定这是否正确,但可能相反。

正如弗兰克所指出的那样,你在循环中增长你的向量,这是不好的做法(因为它不能很好地扩展并且对于大型对象变得非常慢)。 Nathan Werth的回答提出了一个矢量化实现。