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
代码关键说明
- 定位描述列:直接用
supermarketproducts$Description或supermarketproducts[,3]访问第三列,无需遍历所有列 - 包含式匹配:用
grepl()函数检查描述中是否存在目标关键词,ignore.case=TRUE可避免因大小写差异漏匹配 - 列表元素追加:通过
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
相关产品推荐
相关产品推荐

