我想计算一列中的累计数字总和,其中要求和的矢量的长度是可变的,并由另一列中的值定义。
一个例子:
ti <- tibble(group = c(rep("A", 18), rep("B", 18)),
year = c(1990:2007,1991:2008),
x = c(NA, NA, NA, 20, NA, NA, NA, 15, NA, NA, NA, 3, 5, NA, 9, NA, NA, 20,
20, NA, 17, NA, NA, NA, 30, 10, NA, NA, NA, 8, 17, NA, NA, NA, NA, 30),
y = c(sample(1:100, 18), sample(1:100, 18)))
我想在x为非NA的行中得到y的累积和,即
等
理想情况下,解决方案应使用%&gt;%和group_by。
非常感谢!
答案 0 :(得分:0)
此解决方案应该有效。
library(dplyr)
set.seed(220)
ti <- tibble(group = c(rep("A", 18), rep("B", 18)),
year = c(1990:2007,1991:2008),
x = c(NA, NA, NA, 20, NA, NA, NA, 15, NA, NA, NA, 3, 5, NA, 9, NA, NA, 20,
20, NA, 17, NA, NA, NA, 30, 10, NA, NA, NA, 8, 17, NA, NA, NA, NA, 30),
y = c(sample(1:100, 18), sample(1:100, 18)))
ti %>%
group_by(group) %>%
mutate(y = cumsum(y)) %>%
filter(!is.na(x))
#> # A tibble: 13 x 4
#> # Groups: group [2]
#> group year x y
#> <chr> <int> <dbl> <int>
#> 1 A 1993 20 203
#> 2 A 1997 15 458
#> 3 A 2001 3 621
#> 4 A 2002 5 636
#> 5 A 2004 9 761
#> 6 A 2007 20 906
#> 7 B 1991 20 15
#> 8 B 1993 17 104
#> 9 B 1997 30 409
#> 10 B 1998 10 457
#> 11 B 2002 8 595
#> 12 B 2003 17 694
#> 13 B 2008 30 888