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

R语言:基于分组数值范围用rep()循环填充新列Type的方法

解决方案

要实现根据分组对应的数值范围循环填充新列,且支持任意数量分组的通用方案,可按以下步骤操作:

步骤1:构建分组-范围映射表并解析数值序列

首先将分组对应的范围字符串(如"2-4")转换为可循环使用的数值序列:

library(dplyr)
library(stringr)
library(purrr)

# 定义分组与范围的映射关系
range_map <- data.frame(
  Group = c("A", "B", "C"),
  Range = c("2-4", "6-8", "10-12")
) %>%
  mutate(
    # 提取范围的起始和结束数值
    start = as.integer(str_extract(Range, "^\\d+")),
    end = as.integer(str_extract(Range, "\\d+$")),
    # 生成对应的数值序列
    type_seq = map2(start, end, ~.x:.y)
  ) %>%
  select(Group, type_seq) # 保留需要的列

步骤2:关联原始数据并生成循环填充的Type列

将映射表与原始数据关联,按分组循环生成Type值:

# 原始数据框
df <- data.frame(Group = rep(c("A", "B", "C"), times = c(2, 4, 6)))

# 生成目标数据框
df2 <- df %>%
  left_join(range_map, by = "Group") %>%
  group_by(Group) %>%
  mutate(
    # 按当前组的行数循环填充数值序列
    Type = rep_len(unlist(type_seq), n())
  ) %>%
  select(-type_seq) %>% # 移除临时列
  ungroup()

# 查看结果
print(df2)

运行后将得到预期输出:

Group Type
1      A    2
2      A    3
3      B    6
4      B    7
5      B    8
6      B    6
7      C   10
8      C   11
9      C   12
10     C   10
11     C   11
12     C   12

方案优势

  • 扩展性强:新增分组时,只需在range_map中添加对应的Group和Range即可,无需修改核心逻辑
  • 避免硬编码:无需逐个判断分组,通用适配所有分组场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:10:41