加宽数据框并插入缺失的列 [英] Wide a dataframe and insert missing columns

查看:29
本文介绍了加宽数据框并插入缺失的列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

更多数据以dput()格式添加.

我有以下产品数据框,column 的模式为 promo, marca, descripción, cantidad, precio.有时会丢失促销信息.

I have the following products dataframe, with the column having the pattern promo, marca, descripción, cantidad, precio. Sometimes the promo is missing.

我需要更宽形式的数据框(如 pivot_wider),但在没有找到列的地方,插入一个 NA 值.

I need the dataframe in a wider form (like with pivot_wider), but where doesn't find a column, insert a NA value.

 # A tibble: 18 x 2
   text                                              column     
   <chr>                                             <chr>      
 1 2 X$39.990Ahorro:$14.990                          promo      
 2 Pampers                                           marca      
 3 Pañales Desechables Premium Care XXG 112 Unidades descripción
 4 112 Un                                            cantidad   
 5 $27.490                                           precio     
 6 2 X$39.990Ahorro:$14.990                          promo      
 7 Pampers                                           marca      
 8 Pañales Desechables Premium Care XG 112 Unidades  descripción
 9 112 Un                                            cantidad   
10 $27.490                                           precio     
11 Babysec                                           marca      
12 Toalla Húmeda Premium X 140/6                     descripción
13 1 Un                                              cantidad   
14 $2.590                                            precio     
15 Emuwipes                                          marca      
16 Toallitas Húmedas Premium 85 Un c/u Bolsa         descripción
17 2 Un                                              cantidad   
18 $2.650                                            precio    

这是 df %>% mutate(id = row_number()) %>% pivot_wider(...) 的输出.有没有办法缩小这个输出?

This is the output from df %>% mutate(id = row_number()) %>% pivot_wider(...). Is there a way to shrink this output?

# A tibble: 18 x 6
      id promo               marca    descripción                            cantidad precio
   <int> <chr>               <chr>    <chr>                                  <chr>    <chr> 
 1     1 2 X$39.990Ahorro:$~ NA       NA                                     NA       NA    
 2     2 NA                  Pampers  NA                                     NA       NA    
 3     3 NA                  NA       Pañales Desechables Premium Care XXG ~ NA       NA    
 4     4 NA                  NA       NA                                     112 Un   NA    
 5     5 NA                  NA       NA                                     NA       $27.4~
 6     6 2 X$39.990Ahorro:$~ NA       NA                                     NA       NA    
 7     7 NA                  Pampers  NA                                     NA       NA    
 8     8 NA                  NA       Pañales Desechables Premium Care XG 1~ NA       NA    
 9     9 NA                  NA       NA                                     112 Un   NA    
10    10 NA                  NA       NA                                     NA       $27.4~
11    11 NA                  Babysec  NA                                     NA       NA    
12    12 NA                  NA       Toalla Húmeda Premium X 140/6          NA       NA    
13    13 NA                  NA       NA                                     1 Un     NA    
14    14 NA                  NA       NA                                     NA       $2.590
15    15 NA                  Emuwipes NA                                     NA       NA    
16    16 NA                  NA       Toallitas Húmedas Premium 85 Un c/u B~ NA       NA    
17    17 NA                  NA       NA                                     2 Un     NA    
18    18 NA                  NA       NA                                     NA       $2.650

数据:

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")

推荐答案

更新: OP 和其他人使用新提供的数据和在此处获得的知识提出的问题:识别一个给定的模式向量并添加缺少的元素以获得给定模式的重复

Update: to concerns raised by OP and others with new provided data and with the knowledge gained here: Recognize a given pattern in a vector and add the lacking elements to get the repitition of the given pattern

library(tidyverse)
df1 %>% 
    group_by(column) %>% 
    mutate(row = row_number()) %>%
    pivot_wider(
        names_from = column,
        values_from = text
    )

给出:

     row promo                    marca           descripción                                                                    cantidad precio 
   <int> <chr>                    <chr>           <chr>                                                                          <chr>    <chr>  
 1     1 2 X$39.990Ahorro:$14.990 Pampers         Pañales Desechables Premium Care XXG 112 Unidades                              112 Un   $27.490
 2     2 2 X$39.990Ahorro:$14.990 Pampers         Pañales Desechables Premium Care XG 112 Unidades                               112 Un   $27.490
 3     3 3 X$45.990Ahorro:$13.980 Babysec         Toalla Húmeda Premium X 140/6                                                  1 Un     $2.590 
 4     4 2 X$39.990Ahorro:$14.990 Emuwipes        Toallitas Húmedas Premium 85 Un c/u Bolsa                                      2 Un     $2.650 
 5     5 NA                       Parent's Choice Toallitas Húmedas Ultra Soft con Aceite de Emu 160 Un                          160 Un   $2.550 
 6     6 NA                       Emuwipes        Toallitas Húmedas sin Alcohol (2 Bolsas de 80 Un c/u) Bolsa 2 Un               1 Un     $1.990 
 7     7 NA                       Babysec         Pañal Super Premium XXG68                                                      160 Un   $19.990
 8     8 NA                       Parent's Choice Toallitas Húmedas Ultra Soft con Aceite de Emu y sin Aroma (2 Un de 80 Un c/u) 124 Un   $2.550 
 9     9 NA                       Pampers         Pañales Desechables Premium Care G 124 Unidades                                NA       $27.490
10    10 NA                       Huggies         NA                                                                             NA       NA     

第一个答案:

我们可以为每个 column 创建一个唯一的标识符行,然后使用 pivot_wider

We could create a unique identifier row for each column and then use pivot_wider

library(tidyverse)
df %>% 
    group_by(column) %>% 
    mutate(row = row_number()) %>%
    pivot_wider(
        names_from = column,
        values_from = text
    ) 

    row promo                    marca    descripción                                       cantidad precio 
  <int> <chr>                    <chr>    <chr>                                             <chr>    <chr>  
1     1 2 X$39.990Ahorro:$14.990 Pampers  Pañales Desechables Premium Care XXG 112 Unidades 112 Un   $27.490
2     2 2 X$39.990Ahorro:$14.990 Pampers  Pañales Desechables Premium Care XG 112 Unidades  112 Un   $27.490
3     3 NA                       Babysec  Toalla Húmeda Premium X 140/6                     1 Un     $2.590 
4     4 NA                       Emuwipes Toallitas Húmedas Premium 85 Un c/u Bolsa         2 Un     $2.650

这篇关于加宽数据框并插入缺失的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆