R语言使用pivot_wider转换宽表并为缺失列自动填充NA
解决方法
你之前的代码用行号作为pivot的分组ID,每行ID唯一,才会出现每个属性单独占一行的情况。要实现同商品合并为单行,只需先给同属一个商品的所有行分配相同的分组ID,再做宽表转换即可。
完整实现代码如下:
# 加载依赖包 library(tidyverse) # 构造示例数据框 df <- tibble( text = c("2 X$39.990Ahorro:$14.990", "Pampers", "Pañales Desechables Premium Care XXG 112 Unidades", "112 Un", "$27.490", "2 X$39.990Ahorro:$14.990", "Pampers", "Pañales Desechables Premium Care XG 112 Unidades", "112 Un", "$27.490", "Babysec", "Toalla Húmeda Premium X 140/6", "1 Un", "$2.590", "Emuwipes", "Toallitas Húmedas Premium 85 Un c/u Bolsa", "2 Un", "$2.650", "Parent's Choice", "Toallitas Húmedas Ultra Soft con Aceite de Emu 160 Un", "160 Un", "$2.550", "Emuwipes", "Toallitas Húmedas sin Alcohol (2 Bolsas de 80 Un c/u) Bolsa 2 Un", "$1.990", "3 X$45.990Ahorro:$13.980", "Babysec", "Pañal Super Premium XXG68", "1 Un", "$19.990", "Parent's Choice", "Toallitas Húmedas Ultra Soft con Aceite de Emu y sin Aroma (2 Un de 80 Un c/u)", "160 Un", "$2.550", "2 X$39.990Ahorro:$14.990", "Pampers", "Pañales Desechables Premium Care G 124 Unidades", "124 Un", "$27.490", "Huggies"), column = c("promo", "marca", "descripción", "cantidad", "precio", "promo", "marca", "descripción", "cantidad", "precio", "marca", "descripción", "cantidad", "precio", "marca", "descripción", "cantidad", "precio", "marca", "descripción", "cantidad", "precio", "marca", "descripción", "precio", "promo", "marca", "descripción", "cantidad", "precio", "marca", "descripción", "cantidad", "precio", "promo", "marca", "descripción", "cantidad", "precio", "marca") ) # 生成商品分组ID df <- df %>% mutate( # 标记新商品的起始位置:遇到promo字段,或当前是marca且上一条是precio(上一商品结束) new_item = c(TRUE, (column == "promo" | (column == "marca" & lag(column) == "precio"))[-1]), item_id = cumsum(new_item) ) # 转换为宽表,同商品合并为一行 result <- df %>% pivot_wider( id_cols = item_id, names_from = column, values_from = text, values_fn = ~first(na.omit(.x)), values_fill = NA )
运行后得到的result就是你需要的格式:每个商品占一行,无promo字段的条目对应位置自动填充NA。
内容的提问来源于stack exchange,提问作者dzegpi
相关产品推荐
相关产品推荐

