You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改R语言count_and_sum函数以添加分组编号(nr.group)

修改函数添加分组编号列nr.group

我们可以通过两种简单的方式给原函数添加分组编号列nr.group,以下是具体实现:

方法一:分组处理时绑定组号

这种方式在生成每个分组的结果时直接传入对应组号,确保列对应关系准确:

count_and_sum <- function(x){
  runs   <- rle((x > 0) * 1)$lengths
  group_nums <- 1:length(runs)
  groups <- split(x, rep(group_nums, runs))
  # 调整output函数,新增nr.group参数接收组号
  output <- function(group, group_id) {
    data.frame(
      nr.group = group_id,
      x = group,
      n.obs = seq_along(group),
      suma = cumsum(group)
    )
  }
  # 用mapply同步传递分组数据和组号,避免顺序错乱
  result <- as.data.frame(do.call(rbind, mapply(output, groups, group_nums, SIMPLIFY = FALSE)))
  rownames(result) <- 1:nrow(result)
  result
}

方法二:生成结果后追加组号列

这种方式更简洁,利用原函数的runs直接生成分组编号序列追加到结果中:

count_and_sum <- function(x){
  runs   <- rle((x > 0) * 1)$lengths
  groups <- split(x, rep(1:length(runs), runs))
  output <- function(group) data.frame(x = group, n.obs = seq_along(group), suma = cumsum(group))
  result <- as.data.frame(do.call(rbind, lapply(groups, output)))
  # 生成分组编号序列并追加为新列
  result$nr.group <- rep(1:length(runs), runs)
  rownames(result) <- 1:nrow(result)
  result
}

测试验证

用你提供的数据集测试:

df.1 <- data.frame (value = c(10, 12, 15, 14, 13, 0, 0, 14, 7, 13, 0, 14, 14, 0, 0, 0, 0, 4, 2, 10, 12 ))
count_and_sum(df.1$value)

输出结果会包含nr.group列,每个连续的零/非零组对应唯一的编号。

内容的提问来源于stack exchange,提问作者GrBa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 22:45:08