You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免重复代码,从DataFrame按类别生成多个向量?

按DataFrame的类别批量生成Item向量

问题背景

现有如下结构的DataFrame:

Item     Category
[1] Apple    Fruit
[2] Onion    Vegetable
[3] Potato   Vegetable
[4] Grapes   Fruit
[5] Cabbage  Vegetable
[6] Orange   Fruit
[7] Peach    Fruit 

需要按Category分组,生成对应类别的Item向量,期望结果如下:

Fruit
[1] "Apple"  "Grapes" "Orange" "Peach"

Vegetable
[1] "Onion"   "Potato"  "Cabbage"

原有的实现方式是针对每个类别单独筛选转换,代码如下:

Vegie <- df %>% 
  filter(Category == "Vegetable")

Vegie <- as.vector(Vegie$Item)

但实际场景中有17个类别,重复操作效率低且代码冗余,需要更简洁的实现方式。

解决方案

方法1:基础R的split()函数(最简洁)

一行代码即可按类别拆分出所有向量,返回一个命名列表,列表每个元素对应类别的Item向量:

item_vectors <- split(df$Item, df$Category)

调用item_vectors$Fruit可直接获取水果类向量,item_vectors$Vegetable获取蔬菜类向量,所有类别会自动生成对应元素。

方法2:tidyverse风格实现(dplyr + purrr)

若习惯使用tidyverse工具链,可按以下步骤实现:

library(dplyr)
library(purrr)

item_vectors <- df %>%
  group_split(Category, .keep = FALSE) %>%
  set_names(unique(df$Category)) %>%
  map(unlist)
  • group_split():按类别拆分出每个组的DataFrame
  • set_names():给列表设置对应类别的名称
  • map(unlist):将每个组的DataFrame转换为向量

结果验证

运行上述任意方法后,输入item_vectors即可查看所有类别的向量:

> item_vectors
$Fruit
[1] "Apple"  "Grapes" "Orange" "Peach"

$Vegetable
[1] "Onion"   "Potato"  "Cabbage"

内容的提问来源于stack exchange,提问作者Samarth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 00:48:08