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.
相关产品推荐
相关产品推荐

