在R中为DataFrame添加关键词出现次数统计列的最佳实践
批量为DataFrame添加关键词出现次数列(Base R与dplyr实现)
现有一个包含DESCRIPTION字段的DataFrame df,以及存储关键词的向量keywords,需要完成以下操作:
- 为每个关键词在
df中创建对应命名的列 - 在新列中存储该关键词在对应行
DESCRIPTION字段中的出现次数
要求方案支持大量关键词扩展,以下是示例数据和实现方案:
示例数据
# 示例DataFrame (df <- data.frame( ID = letters[1:10], DESCRIPTION = c("blue", "red", "this was green", "this was red", "blue and red", "green", NA, "green", "green, blue, and red", NA) )) # 关键词向量 keywords <- c("blue", "red", "green")
Base R 实现
纯Base R方案无需额外依赖包,通过遍历关键词结合正则匹配统计出现次数,同时处理NA值避免统计错误:
# 将NA值替换为空字符串,防止统计出错 df$DESCRIPTION <- ifelse(is.na(df$DESCRIPTION), "", df$DESCRIPTION) # 遍历每个关键词,生成对应计数列 for (word in keywords) { # 使用gregexpr匹配关键词位置,统计匹配成功的次数 df[[word]] <- sapply(gregexpr(word, df$DESCRIPTION), function(x) sum(x > 0)) }
dplyr 实现
借助dplyr的批量操作函数across,结合stringr的str_count可以更简洁地完成需求,代码可读性更高:
library(dplyr) library(stringr) df <- df %>% # 对每个关键词生成计数列,用coalesce处理NA值 mutate(across(all_of(keywords), ~str_count(coalesce(DESCRIPTION, ""), .x)))
最终输出示例
执行上述代码后,得到的DataFrame如下:
ID DESCRIPTION blue red green 1 a blue 1 0 0 2 b red 0 1 0 3 c this was green 0 0 1 4 d this was red 0 1 0 5 e blue and red 1 1 0 6 f green 0 0 1 7 g 0 0 0 8 h green 0 0 1 9 i green, blue, and red 1 1 1 10 j 0 0 0
内容的提问来源于stack exchange,提问作者yeahman269
相关产品推荐
相关产品推荐

