嵌套数据帧上的函数向量算法
Functional Vector Arithmetic on Nested Data Frames
我想创建一个 returns 向量的函数 - 该向量需要包含另一个向量 (monthly_amount) 中值的总和,但只对 [=29] 中的值求和=]对应的'year_month'(第三个向量)到函数返回其值的索引。
我保证在您看到数据后这会让(一点)更有意义...
这是我的数据:
我有一个包含 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]>
第三列 ('data') 的内容结构完全相同,如下所示:
> 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 循环。
非常感谢任何关于我如何更好地表达这个问题(或解决这个问题!)的建议。
我们可以用 map
遍历 data
,然后按 'year_month' 分组,创建 'desired_outcome' 作为 [=18= 的 sum
]
df %>%
mutate(data = map(data, ~ .x %>%
group_by(year_month) %>%
mutate(desired_outcome = sum( monthly_amount))))
我想创建一个 returns 向量的函数 - 该向量需要包含另一个向量 (monthly_amount) 中值的总和,但只对 [=29] 中的值求和=]对应的'year_month'(第三个向量)到函数返回其值的索引。
我保证在您看到数据后这会让(一点)更有意义...
这是我的数据:
我有一个包含 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]>
第三列 ('data') 的内容结构完全相同,如下所示:
> 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 循环。
非常感谢任何关于我如何更好地表达这个问题(或解决这个问题!)的建议。
我们可以用 map
遍历 data
,然后按 'year_month' 分组,创建 'desired_outcome' 作为 [=18= 的 sum
]
df %>%
mutate(data = map(data, ~ .x %>%
group_by(year_month) %>%
mutate(desired_outcome = sum( monthly_amount))))