Option 1: Using dplyr
library(dplyr)
df %>%
group_by(Product_Code) %>%
mutate(New_Item = toString(Item)) %>%
ungroup()
## A tibble: 5 x 3
# Product_Code Item New_Item
# <fct> <fct> <chr>
#1 ABC Apple Apple, Orange, Banana
#2 ABC Orange Apple, Orange, Banana
#3 ABC Banana Apple, Orange, Banana
#4 DEF Orange Orange, Banana
#5 DEF Banana Orange, Banana
Option 2: In base R
We can use ave
transform(df, New_Item = ave(as.character(Item), Product_Code, FUN = toString))
# Product_Code Item New_Item
#1 ABC Apple Apple, Orange, Banana
#2 ABC Orange Apple, Orange, Banana
#3 ABC Banana Apple, Orange, Banana
#4 DEF Orange Orange, Banana
#5 DEF Banana Orange, Banana
Option 3: Using data.table
library(data.table)
setDT(df)
df[, New_Item := toString(Item), by = Product_Code]
df
# Product_Code Item New_Item
#1: ABC Apple Apple, Orange, Banana
#2: ABC Orange Apple, Orange, Banana
#3: ABC Banana Apple, Orange, Banana
#4: DEF Orange Orange, Banana
#5: DEF Banana Orange, Banana
Sample data
df <- read.table(text =
"Product_Code Item
ABC Apple
ABC Orange
ABC Banana
DEF Orange
DEF Banana", header = T)