循环/普尔映射函数基于R中存储的值创建新变量



我有一个深入杂草的问题,我还没能找到一个足够相似的问题来自己解决。根据以前的经验,总有一个解决方案,但我只是在搜索了很多循环问题和潜在的purrr地图问题后没有找到。

我做健康数据研究。我有一个独特的ICD代码的主列表,用于从开始到结束对患者诊断进行分类——有成千上万的代码。我想添加到数据框架变量中,这些变量定义了我从数据集隔离的特定条件。例如,我在主数据框架中有每一项诊断,我对糖尿病一词有一个明确的定义。我希望能够循环浏览存储为值的多个集合术语定义(糖尿病、心力衰竭、肾病等(,然后在我的主列表数据框架中创建一个新列,其中1表示部分定义,0表示不属于定义。问题是我有数百个定义的条件和数千个潜在的代码,这意味着我当然需要通过编程来完成这项工作(特别是如果我需要调整/添加术语定义并重新定义(。

到目前为止,我已经尝试了以下内容:

library(dplyr)
terms <- c('acute_kidney_failure', 'acute_limb_ischemia')
for(i in terms){
definitions_master.df <- ontology_master.df %>%
mutate(i = if_else(ONTOLOGY_CODE %in% i, 1, 0))
}

我特意在这里保持简单,但有很多很多术语。这些术语具有存储的值,例如acute_kidney_failure<-c(1,2,3(,acute_limb_ischema<-c(4,5,6(。理想情况下,新列的名称与数据框中的术语相同,因为我希望能够识别诊断,如果可以的话,我不想经历重命名数百个术语的麻烦。

我读过很多讨厌循环的账户,我绝不会被它束缚住,但这是我唯一能想到的事情。最后,我希望能够引用这个主定义表来在特定的数据集中创建变量,我会反复使用它。我是长期从事这项工作的,所以我想以编程的方式、优雅的方式和可复制的方式来做这件事。我愿意学习任何必要的新软件包或功能,但如果可以的话,我喜欢呆在冰箱里,因为它不太可能硬破坏我的代码。有人能帮忙吗?

编辑

以下是可重复性最低的示例。很抱歉我花了一段时间才完成这学期的学习。

医疗条件定义如下——我有这些。。。以及他们中的许多人。

library(dplyr)
acute_kidney_failure <- c('1', '3', '5')
acute_limb_ischemia <- c('2', '6', '8')

总体主数据框架如下图所示。识别代码是识别医疗状况的所有代码的主列表,例如1、3、5;上面的2、6、8。

definitions.df <- data.frame(identifying_code = c(1:10))

与下面的变量创建不同,我希望使用某种循环或映射函数来扫描定义,查看"标识代码"变量,然后创建一个新列,生成以下数据帧。我特别希望它是程序化的,因为我们一直在添加新的定义,我希望能够添加一个新定义,再次运行它,并在没有太多麻烦的情况下生成新列。如果我必须重新创建整个定义数据帧,那也没关系,因为它只是一个函数。这是一个简单的例子,但在规模上,手工是不可能做到的。

definitions.df <- definitions.df %>%
mutate(acute_kidney_failure = c(1, 0, 1, 0, 1, 0, 0, 0, 0, 0)) %>%
mutate(acute_limb_ischemia = c(0, 1, 0, 0, 0, 1, 0, 1, 0, 0))

我已经尝试了我之前提到的循环,但没有能力让它运行。有人有想法吗?

假设术语是您正在使用的向量的名称,您可以执行以下操作。

正如您所追求的,您可以使用%in%来查看诊断是否包含在给定的向量中。通过使用get,您访问的对象(在本例中为向量(的名称与terms中的字符串的名称相同。

这将返回关于是否包含在向量中的TRUEFALSE。要转换为1或0,请添加加号+

结果被分配给一个与terms中的字符串名称相同的新列。

for (i in terms) {
definitions.df[[i]] <- (+(definitions.df$identifying_code %in% get(i)))
}

可能有其他方法可以考虑组织您的诊断和数据。如果有任何问题,请告诉我,或者我是否可以提供进一步的帮助。

输出

identifying_code acute_kidney_failure acute_limb_ischemia
1                 1                    1                   0
2                 2                    0                   1
3                 3                    1                   0
4                 4                    0                   0
5                 5                    1                   0
6                 6                    0                   1
7                 7                    0                   0
8                 8                    0                   1
9                 9                    0                   0
10               10                    0                   0

最新更新