代码之家  ›  专栏  ›  技术社区  ›  ct957

R中的colsum条件?

  •  0
  • ct957  · 技术社区  · 6 年前

    我有按周划分的数据,希望将其更改为每月和/或季度数据。我是否可以使用基于日期或周对列数据求和的条件?鉴于我有1962-2016年的数据,我不确定如何根据周数进行计算,不想将所有周数合并。下面是我的数据框架是如何设置的,非常感谢您的建议。

    enter image description here

    好的,这是按周过滤的,我有52或53周的年份。建议的解决方案似乎确实解决了这些问题,尽管有些日期是结束日期,有些日期落在前一年。如果我可以按年份和月份创建一个新列,并对第7-13列中的列值求和(按列而不是按行)

    enter image description here

    2 回复  |  直到 6 年前
        1
  •  1
  •   conv3d    6 年前
    library(dplyr)
    # First create new variable for just the month and year
    df$Month_Yr <- format(as.Date(df$Date), "%Y-%m")
    # Then group by (dplyr) the months and sum over intended variable
    df %>% group_by(Month_Yr) %>% summarise(sum_pideaths = sum(pideaths, na.rm = TRUE))
    

    注意:这将仅对列求和 pideaths 。如果要对所有列求和,请首先选择数字列,然后使用 summarise_all() :

    df %>% select(Month_Yr,**numeric_cols**) %>% group_by(Month_Yr) %>% summarise_all(funs(sum = sum(na.rm = TRUE)))
    
        2
  •  0
  •   IRTFM    6 年前

    这个 as.POSIXlt 函数提供了一个列表,可以提取该列表来提供类似于C的数字月份值,因为它们以0开头表示一月。这不应该是拆分的问题。有关选项,请参见详细信息部分,但我可以告诉您,没有季度选项。

    以下是交付周数的代码:

     as.POSIXlt( Sys.Date()+1:60 )$yday %/% 7
     [1] 13 13 13 13 13 14 14 14 14 14 14 14 15 15 15 15 15 15 15 16 16 16 16 16 16 16 17 17 17 17
    [31] 17 17 17 18 18 18 18 18 18 18 19 19 19 19 19 19 19 20 20 20 20 20 20 20 21 21 21 21 21 21
    

    但请注意,这并不一定与您选择的周初一致。您可能需要减去一年中第一个工作日的数字,以使其正确对齐。(周日是0个工作日。)

    as.POSIXlt( Sys.Date()+1:60 - as.POSIXlt( as.Date( paste0( format(Sys.Date(), "%Y"),"-01-01")))$wday )$yday %/% 7
     [1] 13 13 13 13 13 13 14 14 14 14 14 14 14 15 15 15 15 15 15 15 16 16 16 16 16 16 16 17 17 17
    [31] 17 17 17 17 18 18 18 18 18 18 18 19 19 19 19 19 19 19 20 20 20 20 20 20 20 21 21 21 21 21
    

    另一个提供可打印标签的选项, zoo::as.yearmon

    as.POSIXlt( Sys.Date()+1:60 )$mon
     [1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
    [46] 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5
    
    
    zoo::as.yearmon( Sys.Date()+1:60 )
     [1] "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018"
     [9] "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018"
    [17] "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018"
    [25] "Apr 2018" "Apr 2018" "Apr 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018"
    [33] "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018"
    [41] "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018"
    [49] "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018"
    [57] "May 2018" "May 2018" "Jun 2018" "Jun 2018"
    

    动物园套餐还有 as.yearqtr 功能:

     zoo::as.yearqtr( Sys.Date()+seq(0, 180, by=30) )
    #[1] "2018 Q2" "2018 Q2" "2018 Q2" "2018 Q3" "2018 Q3" "2018 Q3" "2018 Q3"
    

    “Under the hood”(或“bonnet”(视情况而定))此函数实际上也传递数值,但使用具有特殊打印方法的类:

     unclass( zoo::as.yearqtr( Sys.Date()+seq(0, 180, by=30) ) )
    [1] 2018.25 2018.25 2018.25 2018.50 2018.50 2018.50 2018.50