在 Rstudio 中计算表格中额外列中各种文本字符串的熵

Calculate Entropy of various text strings in an extra column od a table in Rstudio

提问人:Sandra Roccuzzo 提问时间:8/5/2023 最后编辑:PhilSandra Roccuzzo 更新时间:9/1/2023 访问量:45

问:

我目前对我正在与 R 合作的硕士论文感到绝望。我希望有人能帮助我!

我有一个包含大约 70,000 行和 38 列的数据帧。现在,我想计算由字符串组成的列(变量)之一的熵。然后,熵应显示为表中的额外列(变量)(见图 - 从表中提取)。

我要计算其熵的变量 Verbatim 包含以下字符串,例如:

“胃轻”或“左脚踝骨折”或“肌酐升高恶化”。所以这些总是不同的句子,我想计算熵。

我尝试了以下代码,但它总是为每个相同的句子(逐字)提供相同的熵值。

DistEventsAllInfo_NOOUTL$ENTROPY <-  entropy(DistEventsAllInfo_NOOUTL$VERBATIM)

提前向你求助!

R

评论

0赞 Phil 8/6/2023
您提到了一张图片,但没有提供任何图片。但无论如何,如果没有可重现的例子,我们无法为您提供帮助。
1赞 Ray 8/6/2023
桑德拉,熵是为系统状态的概率分布而定义的。因此,您可以定义状态。我明白对你来说,这些状态是字符串。然后你测量(或测量)这些状态发生的概率。现在,您的代码将应用于所有字符串向量的 -function 的结果赋值,即您生成 1 个值并赋值。创建状态的发生次数/频率计数并应用该函数。entropy...$VERBATIM

答:

2赞 Ray 8/6/2023 #1

桑德拉,如前所述,如果你提供一个最小的可行例子,你会在这里找到很多朋友。阅读如何创建一个。

熵(和派生信息)是为系统状态的概率分布而定义的。因此,您可以定义状态并测量整个总体出现一种状态的概率。

  • 下面我创建一个虚拟数据样本 - 根据您的情况进行调整,例如名称等。
  • 我还使用 {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