为R数据框添加重复组标识ID2,优化建模计算效率
R数据框分组生成标识ID2并关联模拟结果
原始数据
现有如下R数据框:
df <- data.frame(ID = c('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'), var1 = c(1, 1, 3, 4, 5, 5, 7, 8), var2 = c(1, 1, 0, 0, 1, 1, 0, 0), var3 = c(50, 50, 30, 47, 33, 33, 70, 46))
需求说明
- var1至var3是建模软件的数值输入,为节省计算时间,仅需模拟这三列的唯一组合实例
- 需要新增标识列
ID2,将var1-var3取值完全相同的行归为一组,用该组内的所有ID拼接作为ID2的值 - 最终通过
ID2将模拟结果关联回主数据框
实现代码
使用dplyr包可快速实现需求:
library(dplyr) df_with_id2 <- df %>% group_by(var1, var2, var3) %>% mutate(ID2 = paste(ID, collapse = "")) %>% ungroup() # 查看输出结果 print(df_with_id2)
运行后得到的结果如下:
# A tibble: 8 × 5 ID var1 var2 var3 ID2 <chr> <dbl> <dbl> <dbl> <chr> 1 a 1 1 50 ab 2 b 1 1 50 ab 3 c 3 0 30 c 4 d 4 0 47 d 5 e 5 1 33 ef 6 f 5 1 33 ef 7 g 7 0 70 g 8 h 8 0 46 h
后续操作
筛选var1-var3与ID2的唯一行用于模拟:
unique_sim_rows <- df_with_id2 %>% distinct(var1, var2, var3, ID2)
将模拟结果保存为包含ID2和模拟输出列的数据框后,用left_join关联回主数据框:
# 假设模拟结果数据框为sim_results # sim_results <- data.frame(ID2 = c("ab", "c", "d", "ef", "g", "h"), sim_output = c(10, 20, 30, 40, 50, 60)) final_df <- left_join(df_with_id2, sim_results, by = "ID2")
内容的提问来源于stack exchange,提问作者Loz
相关产品推荐
相关产品推荐

