r - 根据条件求 R 中的行总和

标签 r dataframe

我有一个这种格式的数据

<表类=“s-表”> <标题> ColA ColB ColC <正文> 一个 2 1 一个 1 1 B 3 2 B 5 2 C 2 3 C 5 3 一个 1 1 一个 3 1 B 7 2 B 1 2

我想获得一个新列,其中包含 ColB 行的总和,如下所示:

<表类=“s-表”> <标题> ColA ColB ColC 冷 <正文> 一个 2 1 3 一个 1 1 3 B 3 2 8 B 5 2 8 C 2 3 7 C 5 3 7 一个 1 1 4 一个 3 1 4 B 7 2 8 B 1 2 8

非常感谢您的帮助!

我试过了

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/

相关文章:

python - 将 JSON 文件读入 Spark 时出现 _corrupt_record 错误

r - 一个接一个地求和行值

python - 使用正则表达式根据列的值在数据集中创建新列

python - 连接两个不同大小的数据框,但只想添加一个新列

r - dplyr 0.7.5 select() 行为的变化

r - Slidify 中编号列表的延续

r - 绘制二次增长的增长曲线

r - 将 r 数据帧转换为正确的格式以使用rep

R - 在 foreach 和 doParallel 中使用 # of cores > 64 时插入符号中的模型没有完成

r - 如何使用 R 中的 igraph 根据长度选择图的某些路径