使用lapply或ifelse计算风的U和V分量的风向

RWJ*_*RWJ 5 r

由于罗盘标题范围为0-360度,平均标量风向数据会产生不准确的值,所以我已经将我的列表从幅度和风向角度转换为u和v分量.

为了取消适当的风向,为了平均目的,我需要为以下三种情况开发某种应用,ifelse功能:

V > 0...((180 / pi) * atan((Ucomp/Vcomp)) + 180)
U and V < 0...((180 / pi) * atan((Ucomp/Vcomp)) + 0)
U > 0 and V < 0...((180 / pi) * atan((Ucomp/Vcomp)) + 360)
Run Code Online (Sandbox Code Playgroud)

在我想要分析的数据集中,Ucomp大于0且Vcomp小于零,但毫无疑问会出现所有3都会出现的情况,所以我需要一个函数来解析并迭代计算并应用正确的每个时间步的公式.我之前没有使用lapply或函数,所以我玩它们并没有奏效.

我在下面提供了一些数据样本......

  DateTime Wind.Spd Wind.Direction Air.Density   Temp.C GEP.GE16XLE GCF.GE16XLE    Ucomp      Vcomp
1     1981 7.662370       248.3395   0.9148207 11.28967    597.7513    37.35946 5.253453 -0.7404972
2     1982 8.199412       251.6763   0.9172176 10.12751    678.8595    42.42872 5.867979 -0.6191475
3     1983 8.188782       251.7889   0.9162767 10.30619    667.9461    41.74663 5.777208 -1.0473982
4     1984 7.942632       246.7908   0.9174074 10.05093    642.6374    40.16484 5.415773 -0.6796723
5     1985 8.016558       252.7305   0.9171721 10.38414    654.2588    40.89117 5.649406 -0.9999082
6     1986 7.739984       249.6431   0.9158740 10.99859    607.0542    37.94089 5.305971 -0.9118965
Run Code Online (Sandbox Code Playgroud)

Gre*_*now 8

您应该看看使用该atan2函数,它可能会删除所有if语句和额外计算的需要.

如果你正在做很多指导,那么你也应该查看circular和你CircStats负责处理很多这些细节的包(有些类似于你所做的,只是更自动).


Joh*_*lby 7

首先定义要进行计算的函数:

windDir <- function(u, v) {
  if(v > 0)         ((180 / pi) * atan(u/v) + 180)
  if(u < 0 & v < 0) ((180 / pi) * atan(u/v) + 0)
  if(u > 0 & v < 0) ((180 / pi) * atan(u/v) + 360)
}
Run Code Online (Sandbox Code Playgroud)

然后将其应用于每一行.我在这里使用ddply,这是一个很好的"应用"类型的数据框:

> library(plyr)
> ddply(data, 'DateTime', summarize, windDir=windDir(Ucomp, Vcomp))
  DateTime  windDir
1     1981 278.0232
2     1982 276.0232
3     1983 280.2760
4     1984 277.1531
5     1985 280.0370
6     1986 279.7517
Run Code Online (Sandbox Code Playgroud)


Tho*_*ubb 6

查看:

https://www.eol.ucar.edu/content/wind-direction-quick-reference

简而言之,您想使用 atan2 来处理不同的象限,但不要忘记在气象学中角度的定义不同!我们以北为顺时针方向以度数测量风向,而 atan2 型函数通常以 X 方向(即东)的弧度为单位。所以你想使用类似的东西:

WDIR= 270-atan2(V,U)*180/pi

添加 %360 以确保输出介于 0 和 360 之间:

WDIR= (270-atan2(V,U)*180/pi)%360