R如何将Data Frame中父商品指定列的值覆盖到关联子商品对应列
解决思路
- 首先提取每个sku对应的父sku标识:去掉sku末尾
-\d{3}格式的后缀即可 - 提取所有父商品的
power、width属性,生成映射表 - 用映射表匹配所有商品,将子商品的对应属性替换为父商品的属性值
代码实现(基于tidyverse)
首先加载依赖包:
library(tidyverse)
构造示例数据:
df <- data.frame(sku = c("V1000837", "V1000837-001", "V1000837-002", "01549831"), height = c(10, 12, NA, 50), width = c(15, NA, 15, 150), color = c("red", "blue", "green", "black"), power = c("12W", NA, NA, "130W"))
处理逻辑:
# 生成父sku辅助列 df_process <- df %>% mutate(parent_sku = str_remove(sku, "-\\d{3}$")) # 构建父商品属性映射表,存在重复父sku时可加distinct()去重 parent_map <- df_process %>% filter(str_starts(sku, "V") & !str_detect(sku, "-\\d{3}$")) %>% select(parent_sku = sku, parent_width = width, parent_power = power) # 匹配替换子商品属性 result <- df_process %>% left_join(parent_map, by = "parent_sku") %>% mutate( # 仅符合规则的子商品替换对应属性 width = ifelse(str_starts(sku, "V") & str_detect(sku, "-\\d{3}$"), parent_width, width), power = ifelse(str_starts(sku, "V") & str_detect(sku, "-\\d{3}$"), parent_power, power) ) %>% # 清理辅助列 select(-parent_sku, -parent_width, -parent_power)
输出result即可得到你需要的预期结果。
内容的提问来源于stack exchange,提问作者Axel K
相关产品推荐
相关产品推荐

