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

如何基于unit分组为R数据框的variation列添加自定义字符?

R语言实现按unit分组为variation添加自定义前缀

问题说明

现有如下R语言数据集:

library(tidyverse)
unit <- c(50, 50, 40, 40, 30, 30, 20, 20, 10, 10)

id <- c("A100", "A101", "A102", "A103", "A100", "A101", "A102", "A103", "A101", "A100")
variation <- c("aaa1", "aaa1", "bbb1", "aaa2", "b1","a3", "a1", "b1", "a1", "b1" )
result <- c("Way1", "Way1", "Way2", "Way2", "Way3","Way1", "Way2", "Way3", "Way4", "Way1" )

data <- data.frame(id, variation, result, unit)

需要按unit列分组(相同unit值为一组),为variation列匹配对应自定义前缀:

  • unit=50 → 前缀A1.
  • unit=40 → 前缀A2.
  • unit=30 → 前缀A3.
  • unit=20 → 前缀A4.
  • unit=10 → 前缀A5.

最终让同一组的variation列带有相同前缀,期望输出如下:

#         id variation result unit
# 1  A100      A1.aaa1   Way1   50
# 2  A101      A1.aaa1   Way1   50
# 3  A102      A2.bbb1   Way2   40
# 4  A103      A2.aaa2   Way2   40
# 5  A100        A3.b1   Way3   30
# 6  A101        A3.a3   Way1   30
# 7  A102        A4.a1   Way2   20
# 8  A103        A4.b1   Way3   20
# 9  A101        A5.a1   Way4   10
# 10 A100        A5.b1   Way1   10

实现方案

方案1:使用dplyr包实现

先构建unit与前缀的映射表,通过关联后拼接字符串:

library(dplyr)

# 创建映射关系表
prefix_map <- tibble(
  unit = c(50, 40, 30, 20, 10),
  prefix = c("A1.", "A2.", "A3.", "A4.", "A5.")
)

# 关联映射并更新variation列
data_processed <- data %>%
  left_join(prefix_map, by = "unit") %>%
  mutate(variation = paste0(prefix, variation)) %>%
  select(-prefix) # 移除临时前缀列

# 查看处理后的数据
print(data_processed)

方案2:使用base R实现

通过match函数匹配对应前缀,直接完成字符串拼接:

# 定义unit和对应前缀的匹配向量
unit_list <- c(50, 40, 30, 20, 10)
prefix_list <- c("A1.", "A2.", "A3.", "A4.", "A5.")

# 为每个unit匹配前缀并更新variation列
data$variation <- paste0(
  prefix_list[match(data$unit, unit_list)],
  data$variation
)

# 查看处理后的数据
print(data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:37:32