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

R语言如何按括号内数值重复数据行并计算单地点平均count值

解法1:Base R 实现

你已经完成了数值提取和平均值计算的核心逻辑,只需要对行索引按对应次数重复即可,完整代码如下:

set.seed(5)
df <- data.frame(state = c('A','B'), city = c('Other (3)','Other (2)'), count = c('250','50'))

# 提取每行需要重复的次数
rep_times <- as.numeric(gsub(".*\\((.*)\\).*", "\\1", df$city))
# 计算平均count值,保留3位小数匹配预期输出
df$count <- round(as.numeric(df$count) / rep_times, 3)
# 按次数重复对应行
result <- df[rep(seq_len(nrow(df)), rep_times), ]
# 重置行号(可选操作)
rownames(result) <- NULL

输出的result和你给出的预期结果完全一致。

解法2:Tidyverse 实现(更简洁)

如果你习惯用dplyr生态的工具,可以用uncount函数直接完成行重复操作,代码可读性更高:

library(dplyr)
library(tidyr)
library(stringr)

set.seed(5)
df <- data.frame(state = c('A','B'), city = c('Other (3)','Other (2)'), count = c('250','50'))

result <- df %>%
  mutate(
    count = as.numeric(count),
    # 提取括号内的数字作为重复次数
    rep_times = as.integer(str_extract(city, "(?<=\\()\\d+(?=\\))")),
    # 计算平均count并保留3位小数
    count = round(count / rep_times, 3)
  ) %>%
  # 按rep_times的值重复对应行,自动删除临时生成的rep_times字段
  uncount(rep_times)

内容的提问来源于stack exchange,提问作者James R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:09:04