我目前对我与 R 合作的硕士论文感到绝望。我希望有人可以帮助我!
我有一个大约 70,000 行和 38 列的数据框。现在我想计算由字符串组成的一列(变量)的熵。然后,熵应在表中显示为额外的列(变量)(参见图像 - 从表中提取)。
我要计算熵的变量 Verbatim 包含以下字符串,例如:
“胃轻”或“左脚踝骨折”或“肌酐升高”。所以我想计算这些总是不同的句子的熵。
我已经尝试过以下代码等,但它总是为每个相同的句子给出相同的熵值(逐字)。
DistEventsAllInfo_NOOUTL$ENTROPY <- entropy(DistEventsAllInfo_NOOUTL$VERBATIM)
提前向您求助!
桑德拉,如前所述,如果您提供一个最小的可行示例,您会在这里找到很多朋友。了解如何创建一个。
熵(和派生信息)是为系统状态的概率分布定义的。因此,您可以定义状态并测量整个总体中出现一种状态的概率。
虚拟数据
让我们创建一个案例数据框:
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