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

R语言:如何根据描述关键词将产品名称分类到指定列表?

解决R语言中按关键词匹配生成分类列表的问题

问题梳理

你已导入名为supermarketproducts的数据框,需要生成包含Heavy-duty、Floral、Quick-drying三个子项的列表H:当产品**描述列(第三列)**包含对应关键词时,将该产品名称添加到列表的对应子项中。当前代码存在两个核心问题:

  • 错误遍历所有列,而非仅目标描述列
  • 字符串匹配逻辑错误(精确等于而非包含),且列表元素赋值方式有误

修正后的代码(基础循环版)

# 初始化空列表
H <- list(
  'Heavy-duty' = character(),
  'Floral' = character(),
  'Quick-drying' = character()
)

# 遍历每一行数据
for (i in 1:nrow(supermarketproducts)) {
  # 获取当前行的产品名称和描述
  product_name <- supermarketproducts$Name[i]
  product_desc <- supermarketproducts$Description[i]
  
  # 检查描述是否包含"Heavy-duty",忽略大小写避免漏匹配
  if (grepl("Heavy-duty", product_desc, ignore.case = TRUE)) {
    H[['Heavy-duty']] <- c(H[['Heavy-duty']], product_name)
  }
  
  # 检查描述是否包含"Floral"
  if (grepl("Floral", product_desc, ignore.case = TRUE)) {
    H[['Floral']] <- c(H[['Floral']], product_name)
  }
  
  # 检查描述是否包含"Quick-drying"
  if (grepl("Quick-drying", product_desc, ignore.case = TRUE)) {
    H[['Quick-drying']] <- c(H[['Quick-drying']], product_name)
  }
}

# 查看最终结果
H

代码关键说明

  1. 定位描述列:直接用supermarketproducts$Description或supermarketproducts[,3]访问第三列,无需遍历所有列
  2. 包含式匹配:用grepl()函数检查描述中是否存在目标关键词,ignore.case=TRUE可避免因大小写差异漏匹配
  3. 列表元素追加:通过c()函数将新名称追加到对应列表子项,而非直接替换整个元素

更简洁的R风格写法(无循环)

如果想贴合R向量式编程逻辑,可使用lapply批量处理关键词:

keywords <- c("Heavy-duty", "Floral", "Quick-drying")

H <- lapply(keywords, function(key) {
  supermarketproducts$Name[grepl(key, supermarketproducts$Description, ignore.case = TRUE)]
})
names(H) <- keywords

# 查看结果
H

运行结果

两种方法都会生成你期望的格式:

$`Heavy-duty`
[1] "Surftide"

$Floral
[1] "Fluent"   "Surftide"

$`Quick-drying`
character(0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:03:17