【问题标题】:Apply cumsum function using condition使用条件应用 cumsum 函数
【发布时间】:2022-11-13 14:31:53
【问题描述】:

我正在尝试计算每个站点全年同时在地面上的最大飞机数量,因为我知道我有 300 多个站点并且数据是每天(每天和每小时)的 1 年。

所以我想到了这个解决方案:找到每天和每个站点的最大值,然后提取每个站点的最大值。

我的数据采用这种格式:车站、飞机、时间、类型(到达车站或离开车站),如果到达则值为 1,如果离开则值为 -1,我创建此列以方便计数,这个想法一旦数据按每个站的时间排序,则应用 cumsum。

我需要创建一个函数,按天和按车站对数据进行分组并计算累计总和,但是我有飞机一直在车站睡觉,所以我需要删除它们(屏幕截图中的黄线)。 检测这些平面的技巧: 飞机允许我们跟踪飞机: 通常,它在到达和离开时每天出现两次。 检测这些我必须看的飞机 变量:飞机和类型: 如果类型是离开和这个的飞机变量这条线在这一天只出现一次,(表示该航班没有到达)那么我不应该算他们。

我正在考虑创建一个函数:按(站和时间)分组,然后应用 cumsum 但跳过我之前解释的条件的行。(如果类型是离开和这个的飞机变量这条线在这一天只出现一次,那么我不应该计算它们)

有什么帮助吗??

【问题讨论】:

    标签: r if-statement cumsum


    【解决方案1】:

    我通过使用 Table 函数创建新表 Tab1 来解决这个问题,以计算每天飞机的频率,然后我将此表加入到我的原始数据库中,然后删除带有 freq=1type=departure 的表。

    tab<- as.data.frame(table(df$day,df$AIRCRAFT, useNA = "always"))
    df_new<-df%>% left_join(tab,by=c("day"="Var1","AIRCRAFT" = "Var2"))
    
    df_final<-df_new%>% group_by(day)%>% filter(TYPE=="Departure",Freq==1)%>% arrange(TIMESTAMP)%>% group_by(day) %>% 
      mutate(ground= cumsum(Freq)) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 2016-04-04
      • 1970-01-01
      相关资源
      最近更新 更多