R 确定某个值相对于它的位置是否发生变化';以前的协会
我有一个按R 确定某个值相对于它的位置是否发生变化';以前的协会,r,dataframe,logical-operators,R,Dataframe,Logical Operators,我有一个按site和deploy.id分组的数据框架。在每个站点中,deploy.id按时间顺序排列,并标识设备部署期间每个天线(ant)的方向(方位)。列lag显示上一次部署中每个ant的方位。在我的数据集中,部署中的天线数量可以从一个到十个。我已经生成了一些列,这些列标识了在每个站点中,每个天线号的天线角度是否和以前的部署相同,以及以前部署的“deploy.id”是什么 site = c(rep(1,6),rep(2,9)) deploy.id = c(rep(657,3), rep(755
site
和deploy.id
分组的数据框架。在每个站点中,deploy.id
按时间顺序排列,并标识设备部署期间每个天线(ant
)的方向(方位)。列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
我试过使用group\u by()
和which()
函数的一些组合,看看是否可以根据轴承的位置设置条件,但到目前为止,还没有任何运气
提前谢谢 使用dplyr
包,这可能是值得尝试的
如果您想查看轴承
是否存在于上一个deploy.id
中,并且在lag
列中有可用的值,那么您可能已经接近了
同意由代码<站点> /COD>和<代码>部署> ID>代码>,因为您要考虑这个特定组内的所有<代码>轴承< /代码>值。< /P>
如果以下两项均为
TRUE
,则可以将switched
设置为逻辑TRUE
:
轴承
包含在集团内的lag
中(特定站点
和部署.id
)。使用%
中的%查看方向角
是否包含包含包含所有滞后值的向量。例如,对于deploy.id
755,向量c(0、120、240)中不包含90。但是,对于deploy.id
3732,120包含在向量c(90,60,120)中
第二部分是将轴承
值与同一行中的滞后
值进行比较。这里,对于deploy.id
3732,有90和90是相同的,因此结果是FALSE
。但是,您有120个!=60和60!=120,因此其他两行将具有TRUE
代码
library(dplyr)
df %>%
group_by(site, deploy.id) %>%
mutate(switched = bearing %in% lag & bearing != lag)
输出
site deploy.id port date bearing lag same.angle prev.deploy.id switched
<dbl> <dbl> <int> <chr> <dbl> <dbl> <lgl> <dbl> <lgl>
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
site deploy.id端口日期轴承滞后相同。角度prev.deploy.id已切换
16571 2014-04-25 0不正确错误
2165722014-04-25 120不正确错误
3165732014-04-25240不正确错误
4175512014-08-111900假657假
5175522014-08-11120假657假
6175532014-08-11360240假657假
72202912014-11-21 90不正确错误
82202922014-11-21 60不正确错误
92202932014-11-21120不正确错误
1021071 2015-04-02 9090正确755错误
11 2 2107 2 2015-04-02 60 60 60真755假
12 2 2107 3 2015-04-02 120 120正确755错误
13 2 3732 1 2016-11-22 90 90 90正确2029错误
14 2 3732 2 2016-11-22 120 60假2029真
15 2 3732 3 2017-04-27 60 120假2029真
我想我大致了解您在寻找什么,但仍不确定。首先,您能否澄清端口是否为天线(ant
)?其次,对于2014年8月11日的站点
1,似乎方位
发生了变化,从120-->60(端口
2)到240-->360(端口
3)——这应该算作切换
?第三,如果一个部署中只有一个端口发生了变化,这算不算是切换的?考虑这一点的一个初步想法是安排(例如,使用dplyr
)并在给定的站点和端口内按日期排序(按站点
和端口
分组,而不是按部署.id
)。然后,如果日期正确,您可以将方位
与以前的(滞后
)方位进行比较,以检测更改,并查看是否切换了
。嗨@Ben。谢谢您的帮助。1)我编辑了这篇文章,但是的,端口
与ant
相同。在我的实际数据集中,端口
表示天线。2) 好问题,我没有那样想。在新专栏中,我试图识别天线编号记录为错误方向的实例,而不是方向已更改为新方向的实例。因此,在第4、5和6行的站点
1处,方位发生了变化,但方向与该站点(第1、2、3行)先前的部署不同,因此切换的将为假
。3)是。理想情况下,如果任何一个ant
与先前部署中的任何其他ant
具有相同的承载力,switched
应为TRUE
。
site deploy.id port date bearing lag same.angle prev.deploy.id switched
<dbl> <dbl> <int> <chr> <dbl> <dbl> <lgl> <dbl> <lgl>
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