代码之家  ›  专栏  ›  技术社区  ›  Davide Lorino

嵌套数据帧上的函数向量算法

  •  1
  • Davide Lorino  · 技术社区  · 8 年前

    我想创建一个返回向量的函数——向量需要包含另一个向量中的值之和(月度金额),但只将对应的“年\月”(第三个向量)的“月度金额”中的值与函数返回其值的索引相加。

    我保证在你看到数据后这会更有意义。。。

    以下是我的数据:

    我有一个dataframe,其中包含89个嵌套的dataframe(使用tidyr存储在第三列中),看起来如下:

     head(df)
    
        # A tibble: 6 x 5
      industry location data                
         <dbl>    <dbl> <list>              
    1       8.       9. <tibble [627 × 5]>  
    2       1.       4. <tibble [5,879 × 5]>
    3       9.       2. <tibble [1,271 × 5]>
    4       1.       2. <tibble [8,939 × 5]>
    5       1.       5. <tibble [6,093 × 5]>
    6      10.       5. <tibble [315 × 5]> 
    

    第三列(“数据”)的内容彼此结构相同,它们看起来如下:

    > df$data[[1]]
    
        # A tibble: 627 x 5
       date       monthly_amount year  month year_month
       <date>              <dbl> <chr> <chr> <chr>     
     1 2013-01-01        753851. 2013  01    2013_01   
     2 2013-01-01        154426. 2013  01    2013_01   
     3 2013-01-01        499604. 2013  01    2013_01   
     4 2013-01-01        379321. 2013  01    2013_01   
     5 2013-01-01        213702. 2013  01    2013_01   
     6 2013-01-01        274118. 2013  01    2013_01   
     7 2013-01-01        282391. 2013  01    2013_01   
     8 2013-01-01        236070. 2013  01    2013_01   
     9 2013-01-01        182512. 2013  01    2013_01   
    10 2013-01-01        428778. 2013  01    2013_01   
    

    以下是我试图实现的一个虚拟示例:

    # A tibble: 627 x 5
       date       monthly_amount year  month year_month  desired_outcome
       <date>              <dbl> <chr> <chr> <chr>                <dbl> 
     1 2013-01-01        753851. 2013  01    2013_01 "sum of all monthly_amount     
     2 2013-01-01        154426. 2013  01    2013_01 where year_month==2013_01"
     3 2013-01-02        499604. 2013  02    2013_02 "sum of all monthly_amount  
     4 2013-01-02        379321. 2013  02    2013_02 where year_month==2013_02"  
     5 2013-01-02        213702. 2013  02    2013_02   
     6 2013-01-03        274118. 2013  03    2013_03   etc...
     7 2013-01-03        282391. 2013  03    2013_03   
     8 2013-01-04        236070. 2013  04    2013_04   
     9 2013-01-04        182512. 2013  04    2013_04   
    10 2013-01-04        428778. 2013  04    2013_04 
    

    理想情况下,我会将此函数映射到所有89个数据帧,因此它需要非常通用,而不是更精确地使用for循环。

    关于如何更好地表达这个问题(或解决这个问题!)有什么建议吗非常感谢。

    1 回复  |  直到 8 年前
        1
  •  1
  •   akrun    8 年前

    我们可以循环通过 data 具有 map ,然后按“年\月”分组,创建“期望的\结果”作为 sum “每月金额”的

    df %>%
        mutate(data = map(data, ~ .x %>%
                                   group_by(year_month) %>%
                                   mutate(desired_outcome = sum( monthly_amount))))