将多对多关系的combined表规范化还原为两张目标表
解决方法
生成goal_2
goal_2需要存储唯一的混合物成分组合及其对应ID,步骤如下:
- 从
combined中提取所有唯一的element与conc_pct配对 - 为每个唯一配对分配专属的
MixtureID(示例用行号作为ID,也可采用UUID等其他唯一标识方式)
对应的R代码:
library(dplyr) # 创建goal_2 goal_2 <- combined %>% distinct(element, conc_pct) %>% mutate(MixtureID = row_number())
补全完整的goal_1
你之前仅生成了goal_1的sampleID和location部分,还需关联对应的MixtureID:
- 将
combined与刚生成的goal_2通过element和conc_pct字段关联 - 提取唯一的
sampleID+location+MixtureID组合,得到规范化的goal_1
对应的R代码:
# 创建完整的goal_1 goal_1 <- combined %>% left_join(goal_2, by = c("element", "conc_pct")) %>% distinct(sampleID, location, MixtureID)
验证结果
可通过以下代码验证还原后的表是否与原combined一致:
# 重新连接两张表,移除MixtureID后对比原数据 recombined <- left_join(goal_1, goal_2, by = "MixtureID", relationship = "many-to-many") %>% select(-MixtureID) # 忽略行顺序,检查内容是否匹配 all_equal(combined, recombined, ignore_row_order = TRUE)
内容的提问来源于stack exchange,提问作者Johan
相关产品推荐
相关产品推荐

