R 嵌套数据帧上的函数向量算法
我想创建一个返回向量的函数-向量需要包含另一个向量中的值之和(每月金额),但只将对应“年\月”(第三个向量)的“每月金额”中的值与函数返回其值的索引相加 我保证,在你看到数据后,这会更有意义 以下是我的数据: 我有一个dataframe,其中包含89个嵌套的dataframe(使用tidyr存储在第三列中),它如下所示: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
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 |谢谢你的评论。我忘了合上括号。现在试试\这是一个非常优雅的解决方案-如果我有必要的经验来“投票”你的答案,我会百分之百地投票!