在R语言中如何按DV分组合并数据框中IV_list列的唯一文本值
R语言按分组合并唯一自变量的代码实现
依赖包
dplyr:用于数据分组、汇总操作tidyr:用于字符串拆分、长表转换操作
自动生成示例数据df1(无需手动录入,基于mtcars生成)
# 加载依赖包 library(dplyr) library(tidyr) # 固定随机种子保证结果可复现 set.seed(123) # 构建自变量池,排除用作DV的列 iv_pool <- setdiff(colnames(mtcars), c("mpg", "disp", "hp")) # 自动生成df1 df1 <- data.frame( test_number = 1:10, DV = sample(c("mpg", "disp", "hp"), 10, replace = TRUE), IV_list = replicate(10, paste(sample(iv_pool, sample(2:4, 1)), collapse = "+")) )
核心处理代码
df2 <- df1 %>% # 按DV的唯一值分组 group_by(DV) %>% # 按加号拆分IV_list,每个自变量单独生成一行 separate_rows(IV_list, sep = "\\+") %>% # 保留分组内唯一的自变量,同时保留对应行的其他字段 distinct(IV_list, .keep_all = TRUE) %>% # 按组汇总:拼接唯一自变量,取分组首个检验编号 summarise( test_number = first(test_number), IV_list = paste(IV_list, collapse = "+") ) %>% # 调整列顺序与df1一致 select(test_number, DV, IV_list)
可选调整说明
如果需要保留每个DV分组下所有对应的检验编号,将summarise中test_number的赋值逻辑替换为test_number = paste(test_number, collapse = ",")即可。
内容的提问来源于stack exchange,提问作者Mel
相关产品推荐
相关产品推荐

