有rame raw_df
如下:
library(tidyverse)
detail <- data.frame(cat = c("a","a","a","b","b","b","b","c","c"),
single_amount = c(1,3,7,2,1,4,6,1,6))
total <- data.frame(cat = c("a","b","c"),
total_amount = c(20,10,9))
raw_df <- detail %>% left_join(total, by = 'cat')
我定义了自功能allocate_data_m
,以在cumsum(single_data)
小于total_amount
时分配total_amount
allocate_data_m <- function(data, single_data, total_data) {
out <- cumsum_single_data <- rep('NA', nrow(data))
for (grouprow in seq_len(nrow(data))) {
cumsum_single_data[grouprow] <-
if_else(grouprow == 1, data[grouprow, single_data],
cumsum_single_data[grouprow-1] + data[grouprow, single_data])
out[grouprow] <- if_else(cumsum_single_data[grouprow] < data[grouprow, total_data], data[grouprow, single_data], 0)
}
out
}
当在mutate
中运行allocate_data_m
时,会出现错误.有人可以帮忙吗?谢谢!
raw_df %>%
group_by(cat) %>%
mutate(amount_x_all = allocate_data_m(cur_data(), single_amount, total_amount))
愿望结果如下,我只是想知道allocate_data_m
功能怎么就不能工作了.
raw_df %>%
group_by(cat) %>%
mutate(amount_x_all = if_else(cumsum(single_amount) < total_amount, single_amount, 0))