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

在RStudio中为表格新增列计算不同文本字符串的熵

解决R中逐行计算文本字符串熵的问题

你当前使用的entropy()函数(大概率来自entropy包)是对整个输入向量计算分布熵,而非逐行处理每个文本字符串,这会导致所有行得到相同的熵值(或仅基于整体分布的单一结果)。要实现逐行计算每个文本的熵,需自定义函数并逐行应用,以下是两种可行方案:

方案1:基于字符频率计算熵

如果需要统计每个文本中字符出现频率的熵:

# 加载所需包
library(entropy)
library(stringr)

# 自定义计算单文本字符熵的函数
calc_char_entropy <- function(text) {
  # 去除空格(不需要的话可删除此行)
  text_clean <- str_remove_all(text, "\\s")
  # 统计每个字符的出现次数
  char_counts <- table(str_split(text_clean, "", simplify = TRUE))
  # 计算香农熵
  entropy(char_counts, method = "shannon")
}

# 逐行应用函数生成ENTROPY列
DistEventsAllInfo_NOOUTL$ENTROPY <- sapply(DistEventsAllInfo_NOOUTL$VERBATIM, calc_char_entropy)

方案2:基于单词频率计算熵

如果你的文本是空格分隔的短语(如示例中的“A LIGHT STOMACH”),需要统计单词出现频率的熵:

# 加载所需包
library(entropy)
library(stringr)

# 自定义计算单文本单词熵的函数
calc_word_entropy <- function(text) {
  # 按空格拆分单词,统一转为小写(可选步骤)
  words <- str_split(str_to_lower(text), "\\s+", simplify = TRUE)
  # 过滤空字符串(处理连续空格情况)
  words <- words[words != ""]
  # 统计每个单词的出现次数
  word_counts <- table(words)
  # 计算香农熵
  entropy(word_counts, method = "shannon")
}

# 逐行应用函数
DistEventsAllInfo_NOOUTL$ENTROPY <- sapply(DistEventsAllInfo_NOOUTL$VERBATIM, calc_word_entropy)

优化提示

针对7万行的数据,sapply效率足够,若追求更快速度可改用data.table:

# 使用data.table优化处理速度
library(data.table)
setDT(DistEventsAllInfo_NOOUTL)
DistEventsAllInfo_NOOUTL[, ENTROPY := sapply(VERBATIM, calc_word_entropy)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:42:44