【发布时间】:2021-05-01 22:11:06
【问题描述】:
我有一个按site 和deploy.id 分组的数据框。在每个站点内,deploy.id 按时间顺序排列,并在设备部署期间识别每个天线 (ant) 的方向 (bearing)。 lag 列显示了之前部署中每个ant 的方位。在我的数据集中,部署中的天线数量可以从一到十不等。我已生成列,用于确定在每个站点内,每个天线编号的天线角度是否与之前的部署相同,以及之前部署的 `deploy.id' 是什么。
site = c(rep(1,6),rep(2,9))
deploy.id = c(rep(657,3), rep(755,3), rep(2029,3), rep(2107,3), rep(3732,3))
date = c("2014-04-25", "2014-04-25", "2014-04-25", "2014-08-11", "2014-08-11", "2014-08-11","2014-11-21", "2014-11-21", "2014-11-21", "2015-04-02","2015-04-02","2015-04-02","2016-11-22", "2016-11-22","2017-04-27")
port = c(rep(1:3,5))
bearing = c(0,120,240,90,60,360,90,60,120,90,60,120,90,120,60)
same.angle = c(rep(NA,3), rep(F,3), rep(NA,3), rep(T,3),T,F,F)
lag = c(rep(NA,3),0,120,240, rep(NA,3),90,60,120,90,60,120)
prev.deploy.id = c(rep(NA,3), rep(657,3), rep(NA,3), rep(755,3), rep(2029,3))
df <- data.frame(site, deploy.id, port, date, bearing, lag, same.angle, prev.deploy.id)
df
site deploy.id ant date bearing lag same.angle prev.deploy.id
1 1 657 1 2014-04-25 0 NA NA NA
2 1 657 2 2014-04-25 120 NA NA NA
3 1 657 3 2014-04-25 240 NA NA NA
4 1 755 1 2014-08-11 90 0 FALSE 657
5 1 755 2 2014-08-11 60 120 FALSE 657
6 1 755 3 2014-08-11 360 240 FALSE 657
7 2 2029 1 2014-11-21 90 NA NA NA
8 2 2029 2 2014-11-21 60 NA NA NA
9 2 2029 3 2014-11-21 120 NA NA NA
10 2 2107 1 2015-04-02 90 90 TRUE 755
11 2 2107 2 2015-04-02 60 60 TRUE 755
12 2 2107 3 2015-04-02 120 120 TRUE 755
13 2 3732 1 2016-11-22 90 90 TRUE 2029
14 2 3732 2 2016-11-22 120 60 FALSE 2029
15 2 3732 3 2017-04-27 60 120 FALSE 2029
基于每个站点中的先前部署,我想生成一个新列,指示给定 ant 的 bearing 是否与先前部署中的不同 ant 编号相关联。具体来说,我想知道ant bearing 何时切换(例如ant 2 WAS 在 60 度,但现在是 120,而 ant 3 是 120,但现在是 60 度)。例如。
site = c(rep(1,6),rep(2,9))
deploy.id = c(rep(657,3), rep(755,3), rep(2029,3), rep(2107,3), rep(3732,3))
date = c("2014-04-25", "2014-04-25", "2014-04-25", "2014-08-11", "2014-08-11", "2014-08-11","2014-11-21", "2014-11-21", "2014-11-21", "2015-04-02","2015-04-02","2015-04-02","2016-11-22", "2016-11-22","2017-04-27")
port = c(rep(1:3,5))
bearing = c(0,120,240,90,60,360,90,60,120,90,60,120,90,120,60)
same.angle = c(rep(NA,3), rep(F,3), rep(NA,3), rep(T,3),T,F,F)
lag = c(rep(NA,3),0,120,240, rep(NA,3),90,60,120,90,60,120)
prev.deploy.id = c(rep(NA,3), rep(657,3), rep(NA,3), rep(755,3), rep(2029,3))
switched = c(rep(F,13), T, T)
df = data.frame(site, deploy.id, port, date, bearing, lag, same.angle, prev.deploy.id, switched)
df
site deploy.id ant date bearing lag same.angle prev.deploy.id switched
1 1 657 1 2014-04-25 0 NA NA NA FALSE
2 1 657 2 2014-04-25 120 NA NA NA FALSE
3 1 657 3 2014-04-25 240 NA NA NA FALSE
4 1 755 1 2014-08-11 90 0 FALSE 657 FALSE
5 1 755 2 2014-08-11 60 120 FALSE 657 FALSE
6 1 755 3 2014-08-11 360 240 FALSE 657 FALSE
7 2 2029 1 2014-11-21 90 NA NA NA FALSE
8 2 2029 2 2014-11-21 60 NA NA NA FALSE
9 2 2029 3 2014-11-21 120 NA NA NA FALSE
10 2 2107 1 2015-04-02 90 90 TRUE 755 FALSE
11 2 2107 2 2015-04-02 60 60 TRUE 755 FALSE
12 2 2107 3 2015-04-02 120 120 TRUE 755 FALSE
13 2 3732 1 2016-11-22 90 90 TRUE 2029 FALSE
14 2 3732 2 2016-11-22 120 60 FALSE 2029 TRUE
15 2 3732 3 2017-04-27 60 120 FALSE 2029 TRUE
我尝试使用group_by() 和which() 函数的一些组合来查看是否可以根据轴承的位置创建条件,但到目前为止,还没有任何运气。
提前致谢!
【问题讨论】:
-
我想我大致了解您要查找的内容,但仍不确定。首先您能否澄清
port是否是天线(ant)?其次,对于 2014 年 8 月 11 日的site1,bearing似乎发生了变化,从 120 --> 60 (port2) 和 240 --> 360 (port3) - 应该算作switched?第三,如果一个部署中只有一个port发生变化,这算作switched吗? -
看这个的一个初步想法是
arrange(例如,dplyr)并在给定的site和port内按日期排序(site和port而不是deploy.id)。然后,如果日期是按顺序排列的,可以将bearing与之前的(lag)方位进行比较以检测变化,并查看switched是否。 -
嗨@Ben。感谢您的帮助。1) 我已经编辑了帖子,但是是的,
port与ant相同。在我的实际数据集中port代表天线。 2) 好问题,我没有这么想过。在新专栏中,我试图识别天线编号被记录为错误方位的情况,而不是方位更改为新方向的情况。因此,在第 4、5 和 6 行的site1 处,方位发生了变化,但方向与之前在该站点(第 1、2、3 行)的部署不同,因此switched将是FALSE。 -
3) 是的。理想情况下,如果任何一个
ant与之前部署中的任何其他ant具有相同的方位,则switched应该是TRUE。
标签: r dataframe logical-operators