【问题标题】:R - Summarize data.frame on an intervalR - 在间隔上汇总 data.frame
【发布时间】:2018-04-02 06:38:42
【问题描述】:

我正在尝试对每个星期五的 data.frame 上的变量求和。

随机数据帧

mydf = data.frame(      "ID"   = c( rep( "A" , 6) , rep( "B" , 5 ) ),   "Date" = c( "2017-09-08","2017-09-10","2017-09-13","2017-09-15","2017-09-20","2017-09-22","2017-08-03","2017-08-04","2017-08-10","2017-08-11","2017-08-12" , "Var"  = c( 1,2,3,4,5,6,7,8,NA,10,11) )

mydf$Date = as.Date( mydf$Date )

mydf = cbind( mydf , "WeekDay" = weekdays( mydf$Date ) )

我想得到什么

df_ToGet = 
data.frame( 
    "ID"   = c( rep( "A" , 3) , rep( "B" , 2 ) ),
    "Date" = c( "2017-09-08","2017-09-15","2017-09-22","2017-08-04","2017-08-11"  ),
    "Var_Sum"  = c( 1 , 9 , 11 , 15, 10 )
    )

我尝试了什么

我考虑过使用 dplyr::summarizeaggregate 但我不知道如何正确设置 by 条件。

mydf %>% group_by( ID ) %>% summarize( Var_Sum = aggregate( Var , sum ,  by=list ( (mydf$Weekday)=="Friday") )  )

我已经看到使用 cut 函数解决了一些类似的问题,但这似乎是将条件设置为标准周?我还不太熟悉。

【问题讨论】:

    标签: r dataframe summarize


    【解决方案1】:

    我们需要使用cumsum创建一个分组变量

    mydf %>%
        slice(seq_len(tail(which(WeekDay== "Friday"), 1))) %>% 
        group_by(ID, grp = lag(cumsum(WeekDay == "Friday"), default = 0)) %>% 
        summarise(Date = Date[WeekDay == "Friday"], Var = sum(Var, na.rm = TRUE)) %>%
        ungroup() %>%
        select(-grp)
    # A tibble: 5 x 3
    #     ID       Date   Var
    #   <fctr>     <date> <dbl>
    #1      A 2017-09-08     1
    #2      A 2017-09-15     9
    #3      A 2017-09-22    11
    #4      B 2017-08-04    15
    #5      B 2017-08-11    10
    

    【讨论】:

    • 看起来我问这个问题是正确的,而不是自己弄清楚。谢谢。是否可以改进这一点以允许多个变量?例如,要总结 100 个变量。如果这需要提出一个新问题,请告诉我,我会这样做。
    • 要汇总更多变量,请使用summarize_allsummarize_each 而不是summarize
    • 好的,知道了。干杯@danh
    猜你喜欢
    • 2018-12-26
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 2019-03-08
    相关资源
    最近更新 更多