如何修改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
相关产品推荐
相关产品推荐

