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