基于grep函数的文本挖掘:分类列生成问题技术问询
解决方案:生成推特数据的分类列
我来帮你搞定这个需求!根据你描述的场景,这里有个清晰的R代码解决方案,完全符合你的要求:
核心思路
我们先从已有的call、bill、location这些类别列中提取每行的有效关键词,再根据关键词数量决定是列出类别名称还是标记为other。
步骤1:定义类别列并提取有效关键词
首先,我们先把需要检查的类别列统一存到一个向量里,然后逐行提取非0的类别名称:
# 定义所有需要检查的类别列(如果后续加新类别,直接在这里加列名就行) category_cols <- c("call", "bill", "location") # 给数据框添加一个临时列,存储每行的有效类别列表 vdftweet$category_list <- apply(vdftweet[category_cols], 1, function(row) { # 筛选出当前行中不是"0"的类别名称 row[row != "0"] })
步骤2:生成最终的category_name列
接下来,我们根据临时列里的类别数量生成目标列:
vdftweet$category_name <- sapply(vdftweet$category_list, function(categories) { if (length(categories) > 3) { # 超过3个类别,标记为'other' "other" } else { # 不超过3个,用逗号连接类别名称 paste(categories, collapse = ", ") } })
步骤3:清理临时列(可选)
如果不需要保留临时的category_list列,可以直接删除:
vdftweet$category_list <- NULL
测试你的模拟数据
用你提供的模拟数据运行后,结果会是这样(整理成表格方便查看):
| text | call | bill | location | category_name |
|---|---|---|---|---|
| -the bill was not generated 0 bill 0 | 0 | bill | 0 | bill |
| -tried to raise the complaint 0 0 0 | 0 | 0 | 0 | |
| -the location update failed 0 0 location | 0 | 0 | location | location |
| -the call drop has increased in my location call 0 location | call | 0 | location | call, location |
| -nobody in the location received bill,so call ASAP call bill location | call | bill | location | call, bill, location |
额外提示
- 如果你的类别列里的
0是数值型(不是字符型),记得把判断条件改成row[row != 0],避免类型不匹配的报错。 - 要是后续新增了其他类别(比如你示例里的
app),只需要把新列名加到category_cols向量里,代码就能自动适配。
内容的提问来源于stack exchange,提问作者ASSOND
相关产品推荐
相关产品推荐

