You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:21:03