首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >两列的条件累积和

两列的条件累积和
EN

Stack Overflow用户
提问于 2022-01-14 12:08:43
回答 2查看 263关注 0票数 4

我想不出下面的问题。

假设折叠数据:

代码语言:javascript
运行
复制
library(tidyverse)
df <- tibble(source = c("A", "A", "B", "B", "B", "C"),
             value  = c(5, 10, NA, NA, NA, 20),
             add    = c(1, 1, 1, 2, 3, 4))

我想要做的是:对于所有source == "B"的情况,我想要计算上一行的value和当前行的add的累积和。当然,对于第一个"B“行,我需要为value提供一个起始值。注意:在这种情况下,如果我们只取最后一个"A“行的值就可以了。

因此,对于第3行,结果是10 +1= 11。

对于第4行,结果为11 +2= 13。

对于第5行,结果为13 +3= 16。

我试图使用purrr::accumulate,但在许多不同的方面都失败了,例如我认为我可以做到:

代码语言:javascript
运行
复制
df %>%
  mutate(test = accumulate(add, .init = 10, ~.x + .y))

但这会导致错误:

代码语言:javascript
运行
复制
Error: Problem with `mutate()` column `test`.
i `test = accumulate(add, .init = 10, ~.x + .y)`.
i `test` must be size 6 or 1, not 7.

如果我使用.init = value,也一样

而且,我也没有设法只在B组中完成这项工作(虽然这可能不是问题,但我认为我可能可以在完整的数据框架上执行表单,然后只替换所有非B行的值)。

预期产出:

代码语言:javascript
运行
复制
# A tibble: 6 x 4
  source value   add  test
  <chr>  <dbl> <dbl> <dbl>
1 A          5     1    NA
2 A         10     1    NA
3 B         NA     1    11
4 B         NA     2    13
5 B         NA     3    16
6 C         20     4    NA
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-14 13:09:29

你基本上是在正确的方向上。由于您向.init提供了一个accumulate值,因此得到的向量大小为n+1,第一个值为.init。您必须删除第一个值才能得到适合您的列大小的向量。

然后,如果您希望在剩余的值上使用NAs,下面是一种方法。另外,由于“起始行”是第三行,所以必须将.init设置为8。

代码语言:javascript
运行
复制
df %>%
  mutate(test = 
           ifelse(source == "B", accumulate(add, .init = 8, ~.x + .y)[-1], NA))

# A tibble: 6 x 4
  source value   add  test
  <chr>  <dbl> <dbl> <dbl>
1 A          5     1    NA
2 A         10     1    NA
3 B         NA     1    11
4 B         NA     2    13
5 B         NA     3    16
6 C         20     4    NA
票数 3
EN

Stack Overflow用户

发布于 2022-01-14 12:56:32

@tmfmnk给出了一个很棒的答案,他们应该得到完全的信任(而不是我)

下面是它们注释中的相同代码(为了获得更多的可见性,同时还设置了一个初始值)

init_value = 10 df = df %>%变异(test=滞后(值)) %>% group_by(源) %>%变异(test= init_value +累积量(Add))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70710345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档