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

