r - 我想根据产品列在 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 中做到这一点吗?
解决方案
选项 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)
推荐阅读
- python - Django:在数据库中一次保存多个条目
- android - 以这种方式使用后退按钮是不好的做法吗?
- docker - Drupal - 如何查找 Drush 安装的模块名称?
- c++ - 在 EXE/DLL 之间传递数据
- android - 调用意图变量后应用程序崩溃
- java - Android没有在全屏模式下注册第一次点击
- java - 为什么我的解决方案对于反转整数是错误的?
- php - 在 WordPress 中安装 Polylang 插件后出现 HTTP 500 错误
- linq - .net core - combine a list of func with or to a single func
- hadoop - HBase Replication - Replicate data in 3 data centers