是否有一个R函数通过乘以另一列的值来添加列?

是否有一个R函数通过乘以另一列的值来添加列?,r,dataframe,market-basket-analysis,R,Dataframe,Market Basket Analysis,我想进行关联分析,但需要将数据帧转换为正确的格式,该格式只显示事务。1) 如何将“子类别”列乘以“数量”列的数量 2) 如何按订单ID对交易进行分组 我有这个df: `Order ID` `Sub-Category` `Quantity` <chr> <chr> <dbl> 1 CA-2017-152156 Bookcases 2 2 CA-2017-152

我想进行关联分析,但需要将数据帧转换为正确的格式,该格式只显示事务。1) 如何将“子类别”列乘以“数量”列的数量

2) 如何按订单ID对交易进行分组

我有这个df:

 `Order ID`        `Sub-Category` `Quantity`
  <chr>              <chr>             <dbl>

1 CA-2017-152156    Bookcases             2

2 CA-2017-152156    Chairs                3

3 CA-2017-138688    Labels                2
`Order ID``子类别``数量`
1 CA-2017-152156书架2
2 CA-2017-152156椅子3
3 CA-2017-138688标签2
1) 我想要这个:

  `Order ID`     `Sub-Category` `Sub-Category2`   `Sub-Category3`
  <chr>          <chr>             <chr>           <chr>

1 CA-2017-152156 Bookcases        Bookcases         NULL

2 CA-2017-152156 Chairs             Chairs          Chairs

3 CA-2017-138688 Labels            Labels           NULL
`Order ID``Sub-Category``Sub-Category2``Sub-Category3`
1 CA-2017-152156书架书架空
2 CA-2017-152156张椅子
3 CA-2017-138688标签无效
(之后,我想合并相同的订单ID,例如第1行和第2行。您对此有何提示?)
谢谢大家!

以下是对第1点的回答)


以下是对第1点的回答)

要回答问题1)使用
tidyverse
,一种方法是创建一个新列
rep
eat every
子类别
数量
次数,并以逗号分隔格式将其存储为一个字符串,然后
将其分隔为
n

library(tidyverse)

n <- max(df$Quantity)

df1 <- df %>%
         mutate(new = map2_chr(`Sub-Category`, Quantity, ~paste(rep(.x, .y), collapse = ","))) %>%
         separate(new, paste("Sub-Category", seq_len(n))) %>%
         select(-`Sub-Category`)

df1

#       Order ID  Quantity Sub-Category 1 Sub-Category 2 Sub-Category 3
#1 CA-2017-152156        2      Bookcases      Bookcases           <NA>
#2 CA-2017-152156        3         Chairs         Chairs         Chairs
#3 CA-2017-138688        2         Labels         Labels           <NA>
要回答问题1)使用
tidyverse
,一种方法是创建一个新列
rep
eat every
子类别
数量
次数,并以逗号分隔格式将其存储为一个字符串,然后
将其分隔为
n

library(tidyverse)

n <- max(df$Quantity)

df1 <- df %>%
         mutate(new = map2_chr(`Sub-Category`, Quantity, ~paste(rep(.x, .y), collapse = ","))) %>%
         separate(new, paste("Sub-Category", seq_len(n))) %>%
         select(-`Sub-Category`)

df1

#       Order ID  Quantity Sub-Category 1 Sub-Category 2 Sub-Category 3
#1 CA-2017-152156        2      Bookcases      Bookcases           <NA>
#2 CA-2017-152156        3         Chairs         Chairs         Chairs
#3 CA-2017-138688        2         Labels         Labels           <NA>
您说您想要合并相同的订单ID。2的预期输出是什么?您说要组合相同的订单ID。2)的预期产量是多少?
library(tidyverse)

n <- max(df$Quantity)

df1 <- df %>%
         mutate(new = map2_chr(`Sub-Category`, Quantity, ~paste(rep(.x, .y), collapse = ","))) %>%
         separate(new, paste("Sub-Category", seq_len(n))) %>%
         select(-`Sub-Category`)

df1

#       Order ID  Quantity Sub-Category 1 Sub-Category 2 Sub-Category 3
#1 CA-2017-152156        2      Bookcases      Bookcases           <NA>
#2 CA-2017-152156        3         Chairs         Chairs         Chairs
#3 CA-2017-138688        2         Labels         Labels           <NA>
df1 %>%
  group_by(`Order ID`) %>%
  summarise_at(vars(starts_with("Sub")), list(~paste(na.omit(.), collapse = ",")))

# A tibble: 2 x 4
#  `Order ID`   `Sub-Category 1` `Sub-Category 2` `Sub-Category 3`
#  <fct>          <chr>            <chr>            <chr>           
#1 CA-2017-138688 Labels           Labels           ""              
#2 CA-2017-152156 Bookcases,Chairs Bookcases,Chairs Chairs