Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 嵌套数据帧上的函数向量算法_R_Dplyr_Purrr_Broom - Fatal编程技术网

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

R 嵌套数据帧上的函数向量算法,r,dplyr,purrr,broom,R,Dplyr,Purrr,Broom,我想创建一个返回向量的函数-向量需要包含另一个向量中的值之和(每月金额),但只将对应“年\月”(第三个向量)的“每月金额”中的值与函数返回其值的索引相加 我保证,在你看到数据后,这会更有意义 以下是我的数据: 我有一个dataframe,其中包含89个嵌套的dataframe(使用tidyr存储在第三列中),它如下所示: head(df) # A tibble: 6 x 5 industry location data <dbl&g

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

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

以下是我的数据:

我有一个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)
#一个tibble:6x5
行业位置数据
1       8.       9
2       1.       4.
3       9.       2.
4       1.       2.
5       1.       5.
6      10.       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   
>df$data[[1]]
#A tibble:627x5
日期月金额年月份年月份
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 
#一个tible:627 x 5
日期月金额年月期望结果
1 2013-01-01        753851. 2013 01 2013\u 01“所有月度金额之和
2 2013-01-01 154426.2013 01 2013\u 01其中年份\u月份==2013\u 01“
3 2013-01-02        499604. 2013年2月2013年2月“所有月度金额之和”
4 2013-01-02 379321.2013 02 2013_02其中年份_月==2013_02“
5 2013-01-02        213702. 2013  02    2013_02   
6 2013-01-03        274118. 2013 03 2013_03等。。。
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循环


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

我们可以使用
map
循环查看
数据
,然后按“年/月”分组,创建“预期结果”作为“月金额”的
总和

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

这看起来很棒!我对map函数的右括号有问题,显然我不是专家,但我不确定在哪里关闭该括号。@DavideLorino |谢谢你的评论。我忘了合上括号。现在试试\这是一个非常优雅的解决方案-如果我有必要的经验来“投票”你的答案,我会百分之百地投票!