【问题标题】:Functional Vector Arithmetic on Nested Data Frames嵌套数据框上的函数向量算术
【发布时间】:2018-05-18 17:00:12
【问题描述】:

我想创建一个返回向量的函数 - 该向量需要包含另一个向量 (monthly_amount) 中的值的总和,但只对相应的“year_month”(第三个向量) 中的“monthly_amount”值求和) 到函数返回其值的索引。

我保证在你看到数据之后这会让(一点)更有意义......

这是我的数据:

我有一个包含 89 个嵌套数据框的数据框(使用 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 循环。

非常感谢任何关于我如何更好地表达这个问题(或解决这个问题!)的建议。

【问题讨论】:

    标签: r dplyr purrr broom


    【解决方案1】:

    我们可以用map循环遍历data,然后按'year_month'分组,创建'desired_outcome'作为'monthly_amount'的sum

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

    【讨论】:

    • 这看起来很棒!我在使用 map 函数的右括号时遇到问题,显然我不是专家,但我不确定在哪里关闭该括号。
    • @DavideLorino |感谢您的评论。我忘了关闭括号。立即尝试\
    • 这是一个非常优雅的解决方案 - 如果我有必要的经验来“投票”你的答案,我会 100% 做到这一点!
    猜你喜欢
    • 1970-01-01
    • 2018-03-21
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多