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

问题描述 投票:0回答:1

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

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

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

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

我已经尝试过以下代码等,但它总是为每个相同的句子给出相同的熵值(逐字)。

DistEventsAllInfo_NOOUTL$ENTROPY <-  entropy(DistEventsAllInfo_NOOUTL$VERBATIM)

提前向您求助!

r entropy
1个回答
0
投票

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

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

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

数据处理 - 您使用哪个

entropy()
功能?

尚不清楚您使用哪个包来实现

entropy()
函数,或者您是否自己编写了此函数。

{entropy}
包中,函数
entropy()
需要一个数值变量(想想数据框的列)。

因此应用

entropy(df$GROUP)
将引发错误。

如果您编写了函数,请将其发布到此处。这样我们就可以解决该函数的功能问题。

使用

{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 组,因为您仅向

entropy()
函数提供 VALUE 变量/列。

我们可以通过对案例进行“分组”来计算

entropy
(注意:我将 VERBATIM 重命名为 GROUP 以使您更清楚)。

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}
计算分组熵并将其注入新列 ENTROPY 中。

您想使用

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
© www.soinside.com 2019 - 2024. All rights reserved.