我有一个这种格式的数据
我想获得一个新列,其中包含 ColB 行的总和,如下所示:
非常感谢您的帮助!
我试过了
df$ColD <- with(df, sum(ColB[ColC == 1]))
最佳答案
在我看来,您希望 ColD
具有由 ColA
中的值定义的每个连续组的 ColB
之和。在这种情况下,我们可以这样做:
library(dplyr)
df %>%
mutate(group = data.table::rleid(ColA)) %>%
group_by(group) %>%
mutate(ColD = sum(ColB)) %>%
ungroup() %>%
select(-group)
#> # A tibble: 10 x 4
#> ColA ColB ColC ColD
#> <chr> <int> <int> <int>
#> 1 A 2 1 3
#> 2 A 1 1 3
#> 3 B 3 2 8
#> 4 B 5 2 8
#> 5 C 2 3 7
#> 6 C 5 3 7
#> 7 A 1 1 4
#> 8 A 3 1 4
#> 9 B 7 2 8
#> 10 B 1 2 8
无论如何,这与预期输出相同。
创建于 2023 年 1 月 16 日 reprex v2.0.2
可重现格式的问题数据
df <- structure(list(ColA = c("A", "A", "B", "B", "C", "C", "A", "A",
"B", "B"), ColB = c(2L, 1L, 3L, 5L, 2L, 5L, 1L, 3L, 7L, 1L),
ColC = c(1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L)),
class = "data.frame", row.names = c(NA, -10L))
关于r - 根据条件求 R 中的行总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75133920/