循环遍历行,创建和重用多个变量

时间:2014-06-30 13:16:01

标签: r for-loop apply

我正在使用Access数据库中的多个表在R中构建一个河床水文计算器。我无法自动化并计算多个站点的同一组索引。以下示例数据集描述了我的数据结构:

> Thalweg
   StationID    AB0 AB1 AB2 AB3 AB4 AB5 BC1 BC2 BC3 BC4 Xdep_Vdep
1  1AAUA017.60   47  45  44  55  54   6  15  39  15  11  18.29
2  1AXKR000.77   30  27  24  19  20  18   9  12  21  13  6.46
3  2-BGU005.95   52  67  62  42  28  25  23  26  11  19  20.18
4  2-BLG011.41   66  85  77  83  63  35  10  70  95  90  67.64
5  2-CSR003.94   29  35  46  14  19  14  13  13  21  48  6.74

其中每列代表某些现场测量参数(即到达区段的深度),每行代表不同的站点。

我已成功使用apply函数同时计算多行的简单函数:

> Xdepth <- apply(Thalweg[, 2:11], 1, mean) # Mean Depth
> Xdepth
   1    2    3    4    5 
33.1 19.3 35.5 67.4 25.2 

并将结果附加回数据框中的正确工作站。

但是,当我想计算并保存随后用于进一步计算的变量时,我正在苦苦挣扎。我似乎无法循环或将相同的函数应用于单个行上的多个列,并在下一行中完成相同的计算而不混合变量和数据。

我想这样做:

Residual_AB0 <- min(Xdep_Vdep, Thalweg$AB0)
Residual_AB1 <- min((Residual_AB0 + other_variables), Thalweg$AB1)
Residual_AB2 <- min((Residual_AB1 + other_variables), Thalweg$AB2)
Residual_AB3 <- min((Residual_AB2 + other_variables), Thalweg$AB3) 
# etc.
Depth_AB0 <- (Thalweg$AB0 - Residual_AB0)
Depth_AB1 <- (Thalweg$AB1 - Residual_AB1)
Depth_AB2 <- (Thalweg$AB2 - Residual_AB2)
# etc.

我已经尝试过,然后在for循环失败,例如:

for (i in nrow(Thalweg)){
  Residual_AB0 <- min(Xdep_Vdep, Thalweg$AB0)
  Residual_AB1 <- min((Residual_AB0 + Stacks_Equation), Thalweg$AB1)
  Residual_AB2 <- min((Residual_AB1 + Stacks_Equation), Thalweg$AB2)
  Residual_AB3 <- min((Residual_AB2 + Stacks_Equation), Thalweg$AB3)
  Residuals <- data.frame(Thalweg$StationID, Residual_AB0, Residual_AB1, Residual_AB2, Residual_AB3)
}

当我需要为我当前正在计算的每个特定行保存唯一变量时,是否有更好的方法来处理多行数据的循环?谢谢你的任何建议。

1 个答案:

答案 0 :(得分:0)

你的确切问题对我来说仍然是一个谜...... 但看起来你想要一个双循环

for(i in 1:nrow(thalweg)){
  residual=thalweg[i,"Xdep_Vdep"]
  for(j in 2:11){
    residual=min(residual,thalweg[i,j])
  }
}