我有一个简单的公式,其中包括两个变量:方位角和波束宽度。方位角表示天线的方向/方位,由 0 度到 360 度之间的整数值给出。波束宽度代表天线的水平宽度,类似于一 block 苹果派的水平宽度。
cellPoints <- (Azimuth - (Beamwidth/2))%%360
如果我的方位角/方位角为 120 度,波束宽度为 60 度,则意味着我的边缘位于 120-(60/2) 和 120+(60/2)。由于我的最左角度是 90 度,我希望从 90 度增加波束宽度/6,直到达到 150 度。
我想将结果存储在矩阵中。对于一次性计算来说,这很容易实现,但我的方位角和波束宽度具有许多不同的值。应该使用 for 循环还是使用 apply 系列之一来完成此操作?
我的数据框如下所示:
我的表格如下所示:
Cell Name Azimuth Beamwidth cellPoints
ABCDU09A3 120 65 87.5 98.33 109.16 119.99 130.82 141.65 152.48
ABCDU09B3 240 65
ABCDU09C3 0 65
最佳答案
你想要这样的序列吗?
edges = seq(Azimuth - Beamwidth/2, Azimuth + Beamwidth/2, Beamwidth/6)%%360
结果
Azimuth = 120
Beamwidth = 60
> edges
[1] 90 100 110 120 130 140 150
如果您有多个方位角值和相应的波束宽度,则执行以下操作:
Azimuth = c(120,300,40)
Beamwidth = c(60,30,6)
df = data.frame(Azimuth, Beamwidth)
points = apply(df,1, function(x) seq(x[1]-x[2]/2,x[1]+x[2]/2,x[2]/6) %% 360)
>points
[,1] [,2] [,3]
[1,] 90 285 37
[2,] 100 290 38
[3,] 110 295 39
[4,] 120 300 40
[5,] 130 305 41
[6,] 140 310 42
[7,] 150 315 43
编辑
使用你的数据框,你应该这样做:
cellNames = c("ABCDU09A3","ABCDU09B3","ABCDU09C3")
Azimuth = c(120,240,0)
Beamwidth = c(65,65,65)
df = data.frame(cellNames,Azimuth, Beamwidth)
points = apply(df[,2:3],1, function(x) seq(x[1]-x[2]/2,x[1]+x[2]/2,x[2]/6) %% 360)
df = cbind(df,t(points))
结果:
cellNames Azimuth Beamwidth 1 2 3 4 5 6 7
1 ABCDU09A3 120 65 87.5 98.33333 109.1667 120 130.83333 141.66667 152.5
2 ABCDU09B3 240 65 207.5 218.33333 229.1667 240 250.83333 261.66667 272.5
3 ABCDU09C3 0 65 327.5 338.33333 349.1667 0 10.83333 21.66667 32.5
如您所见,function(x)
在 apply 函数中将取为 x
参数数据框的每一行df
但只有第 2 列和第 3 列(方位角和带宽)。
apply 函数的结果存储在列中,以便将其绑定(bind)到 df
您需要按行获得结果,因此使用 t(points)
转置它.
关于r - 将变量递增 N 次并将答案存储在矩阵中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40181522/