首页 > 解决方案 > 我想根据产品列在 R 中编写串联代码

问题描述

我有如下数据

Product_Code  Item
ABC            Apple
ABC            Orange
ABC            Banana
DEF            Orange
DEF            Banana

我希望我的结果为:

Product_Code   Item    New_Item
ABC            Apple   Apple, Orange, Banana
ABC            Orange  Apple, Orange, Banana
ABC            Banana  Apple, Orange, Banana
DEF            Orange  Orange, Banana
DEF            Banana  Orange, Banana

你能帮我如何在 R 中做到这一点吗?

标签: r

解决方案


选项 1:使用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

选项 2:在基础 R 中

我们可以用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

选项 3:使用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

样本数据

df <- read.table(text =
    "Product_Code  Item
ABC            Apple
ABC            Orange
ABC            Banana
DEF            Orange
DEF            Banana", header = T)

推荐阅读