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

R语言strsplit函数报错排查:非字符参数问题及薯片数据筛选

超市薯片销售数据处理问题解答

问题背景

正在完成超市薯片销售数据课程作业,需剔除非薯片类条目,运行给定R代码时出错。

运行代码

productWords <- data.table(unlist(strsplit(unique(transaction_data[, "PROD_NAME"]), "")))

数据文件为transaction_data,目标列是PROD_NAME。

报错信息

Error in strsplit(unique(transaction_data[, "PROD_NAME"]), "") : non-character argument

数据示例

DATE       STORE_NBR LYLTY_CARD_NBR TXN_ID PROD_NBR PROD_NAME                                PROD_QTY TOT_SALES
  <date>         <dbl>          <dbl>  <dbl>    <dbl> <chr>                                       <dbl>     <dbl>
1 2018-10-17         1           1000      1        5 Natural Chip        Compny SeaSalt175g          2       6  
2 2019-05-14         1           1307    348       66 CCs Nacho Cheese    175g                        3       6.3
3 2019-05-20         1           1343    383       61 Smiths Crinkle Cut  Chips Chicken 170g          2       2.9

错误原因

  1. 类型不匹配:strsplit要求第一个参数是纯字符向量,但transaction_data[, "PROD_NAME"]返回的是data.table的列对象,而非纯字符类型,unique()处理后仍未转换为字符向量,导致报错。
  2. 逻辑错误:原代码用strsplit(..., "")把产品名称拆成单个字符,完全无法用于区分薯片和非薯片产品,逻辑方向错误。

解决方案

1. 修正原代码的类型问题(仅解决报错,不解决业务需求)

如果只是想让原代码运行,需先将列转换为字符向量:

prod_names <- as.character(transaction_data$PROD_NAME)
productWords <- data.table(unlist(strsplit(unique(prod_names), "")))

2. 正确筛选薯片类条目(满足作业需求)

方法1:关键词模糊匹配

通过识别PROD_NAME中的薯片相关关键词(如品牌、产品术语)筛选:

# 匹配包含Chip/Chips/CCs的记录,忽略大小写
chip_data <- transaction_data[grepl("(Chip|Chips|CCs)", PROD_NAME, ignore.case = TRUE), ]

可根据实际产品补充更多关键词(比如其他薯片品牌)。

方法2:精准匹配已知产品列表

如果有已知的薯片产品清单,直接匹配:

# 示例薯片产品列表
chip_products <- c("Natural Chip Compny SeaSalt175g", "CCs Nacho Cheese 175g", "Smiths Crinkle Cut Chips Chicken 170g")
# 筛选匹配记录
chip_data <- transaction_data[PROD_NAME %in% chip_products, ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:05:32