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

使用inner_join()结合AFINN词典后结果行数超词典的原因咨询

问题拆解与解决方案

嘿,我来帮你理清这两个常见的R数据处理误区~

1. 为什么inner_join结果行数远超AFINN词典行数?

核心原因是你混淆了唯一单词数和单词总出现次数:

  • AFINN词典的2477行代表的是2477个唯一的情感单词,每个单词只在词典里记录一次(比如"happy"在词典里只有1行)。
  • 而你的《傲慢与偏见》数据框中,这些情感单词可能重复出现很多次(比如"happy"在小说里可能出现了20次)。inner_join()会把原文中每一次出现的匹配单词都和词典条目合并,所以最终的6065行是原文中所有属于AFINN词典的单词的总出现次数,而不是不同单词的数量。

你可以用下面的代码验证这个逻辑:

# 统计结果中唯一的情感单词数量(应该≤2477)
length(unique(afinn_sentiments$word))

# 统计AFINN词典中每个单词在原文里的出现次数
afinn_sentiments %>% 
  count(word, sort = TRUE)

2. 为什么你的filter代码返回全部6065行?

你的代码逻辑犯了一个小细节错误:

afinn_sentiments %>% filter(!word %in% afinn)

这里的afinn是整个AFINN词典数据框,但%in%需要对比的是字符向量(也就是词典里的单词列)。当你用字符类型的word去和数据框afinn做匹配时,结果永远是FALSE(字符不可能属于一个数据框),所以!FALSE就是TRUE,所有行都会被保留,自然返回6065行。

修正后的代码应该提取AFINN词典的单词列再做对比:

# 假设你的AFINN词典数据框名为afinn,先提取单词列
afinn_word_list <- afinn$word

# 再过滤(正常来说inner_join后的结果应该没有不在词典里的单词,所以这个过滤会返回0行)
afinn_sentiments %>% filter(!word %in% afinn_word_list)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:42:36