提问人:Sandra Roccuzzo 提问时间:8/5/2023 最后编辑:PhilSandra Roccuzzo 更新时间:9/1/2023 访问量:45
在 Rstudio 中计算表格中额外列中各种文本字符串的熵
Calculate Entropy of various text strings in an extra column od a table in Rstudio
问:
我目前对我正在与 R 合作的硕士论文感到绝望。我希望有人能帮助我!
我有一个包含大约 70,000 行和 38 列的数据帧。现在,我想计算由字符串组成的列(变量)之一的熵。然后,熵应显示为表中的额外列(变量)(见图 - 从表中提取)。
我要计算其熵的变量 Verbatim 包含以下字符串,例如:
“胃轻”或“左脚踝骨折”或“肌酐升高恶化”。所以这些总是不同的句子,我想计算熵。
我尝试了以下代码,但它总是为每个相同的句子(逐字)提供相同的熵值。
DistEventsAllInfo_NOOUTL$ENTROPY <- entropy(DistEventsAllInfo_NOOUTL$VERBATIM)
提前向你求助!
答:
桑德拉,如前所述,如果你提供一个最小的可行例子,你会在这里找到很多朋友。阅读如何创建一个。
熵(和派生信息)是为系统状态的概率分布而定义的。因此,您可以定义状态并测量整个总体出现一种状态的概率。
- 下面我创建一个虚拟数据样本 - 根据您的情况进行调整,例如名称等。
- 我还使用 {tidyverse} 系列软件包来帮助您了解它是如何工作的(即定义您感兴趣的组/案例 ~ 状态)。
一、虚拟数据
让我们创建一个案例数据框:
library(dplyr) # or library(tidyverse) - dplyr is one package for data crunching
# our dummy data
# we abbreviate DistEventsAllInfo_NOOUTL to df!
# to make the case, we name VERBATIM as GROUP!
# the variable VALUE is an arbitrary description
# we do not know your case, e.g. days of treatment?
# VALUE is a metric of your state!
df <- data.frame(
GROUP = c("A LIGHT STOMACH", "A LIGHT STOMACH"
, "LEFT ANKLE FRACTURE", "LEFT ANKLE FRACTURE",
"WORSENING INCREASED CREATININE", "WORSENING INCREASED
CREATININE","WORSENING INCREASED CREATININE")
,VALUE = c(17, 11, 36, 48, 42, 15, 19)
)
这会产生:
df
GROUP VALUE
1 A LIGHT STOMACH 17
2 A LIGHT STOMACH 11
3 LEFT ANKLE FRACTURE 36
4 LEFT ANKLE FRACTURE 48
5 WORSENING INCREASED CREATININE 42
6 WORSENING INCREASED CREATININE 15
7 WORSENING INCREASED CREATININE 19
II. 数据处理 - 您使用的是哪个 entropy()
函数?
目前尚不清楚您为该函数使用哪个包,或者是否您自己编写了此函数。entropy()
在包中,该函数需要一个数值变量(想想数据框的列)。{entropy}
entropy()
因此,应用将引发错误。entropy(df$GROUP)
如果您已经编写了函数,请在此处发布。这样,我们就可以对函数的功能进行故障排除。
III. 使用 {entropy} 包函数 entropy()
进行数据处理
在不分组的情况下对向量运行函数时得到的结果
library(entropy)
# we stress the package by using the entropy:: notation
df |> mutate(ENTROPY = entropy::entropy(VALUE))
GROUP VALUE ENTROPY
1 A LIGHT STOMACH 17 1.816692
2 A LIGHT STOMACH 11 1.816692
3 LEFT ANKLE FRACTURE 36 1.816692
4 LEFT ANKLE FRACTURE 48 1.816692
5 WORSENING INCREASED CREATININE 42 1.816692
6 WORSENING INCREASED CREATININE 15 1.816692
7 WORSENING INCREASED CREATININE 19 1.816692
这里将整个总体视为 1 个组,因为您只向函数提供 VALUE 变量/列。entropy()
我们可以通过对案例进行“分组”来计算(注意:我将 VERBATIM 重命名为 GROUP 以使您更清楚)。entropy
df |>
group_by(GROUP) |> # dplyr's grouping
mutate(ENTROPY = entropy::entropy(VALUE))
# A tibble: 7 × 3
# Groups: GROUP [3]
GROUP VALUE ENTROPY
<chr> <dbl> <dbl>
1 A LIGHT STOMACH 17 0.670
2 A LIGHT STOMACH 11 0.670
3 LEFT ANKLE FRACTURE 36 0.683
4 LEFT ANKLE FRACTURE 48 0.683
5 WORSENING INCREASED CREATININE 42 0.995
6 WORSENING INCREASED CREATININE 15 0.995
7 WORSENING INCREASED CREATININE 19 0.995
{dplyr}
计算组熵并将其注入新的列熵中。与上述类似,计算出的熵值作为每组的向量插入(即您将为每个组成员获得相同的值)。
您希望用于简化输出dplyr::summarise()
df |>
group_by(GROUP) |>
summarise(ENTROPY = entropy::entropy(VALUE))
# A tibble: 3 × 2
GROUP ENTROPY
<chr> <dbl>
1 A LIGHT STOMACH 0.670
2 LEFT ANKLE FRACTURE 0.683
3 WORSENING INCREASED CREATININE 0.995
上一个:使用加权样本估计微分熵?
下一个:使用算术编码计算压缩比?
评论
entropy
...$VERBATIM