【问题标题】:R: Search multiple columns for factorsR:在多列中搜索因子
【发布时间】:2018-04-30 13:24:30
【问题描述】:

我有一个包含多列(大约 150 列)的大型数据框。
有一系列列(Dx1、Dx2..直到 Dx30)是诊断代码(代码是数字,但它们是对应于使用 ICD-9 编码系统的医学诊断的分类变量)。

我有工作代码来搜索单个列,但需要搜索所有 30 列以查看是否有任何列包含指定范围 (DXrange) 内的代码。

核心数据框如下所示:

Case  DX1   DX2   DX3  DX4...DX30
1     123   345   567  99    12
2     234   345   NA   NA    NA
3     456   567   789  345   34

这是工作代码:

## Defines a range of codes to search for    
DXrange <- factor(41000:41091, levels = levels(core$DX1)) 

## Search for the DXrange codes in column DX1.  

core$IndexEvent <- core$DX1 %in% DXrange & substr(core$DX1, 5, 5) != 2

## What is the frequency of the IndexEvent?
    cat("Frequency of IndexEvent : \n"); table(core$IndexEvent)

工作代码改编自“Calculating Nationwide Readmissions Database (NRD) Variances, Report # 2017-01”

我可以为每个 DX 列运行这个,然后将它们相加得到最终的 IndexEvent 总数,但这不是很有效。

【问题讨论】:

  • 你说这是一个工作代码,但除非你分享core数据集,否则它是行不通的。
  • 请学习如何制作可重现的示例:stackoverflow.com/questions/5963269/…
  • 谢谢。更新了问题以包含核心数据框的子集。
  • 您应该添加一些创建示例数据的 R 代码。
  • 我推荐我和一些合作者创建的 CRAN 包:icd。它可以处理医疗代码的长或宽格式数据帧,包括 ICD-9 和 ICD-10 代码,并使用标准的同行评审或自定义组定义将它们分配给组。它速度非常快,在过去五年中被世界各地的研究人员使用和贡献,并验证了原始文章。希望你觉得它有用。 cran.r-project.org/package=icd

标签: r


【解决方案1】:

在搜索代码之前,我会先规范化我的数据,例如以下示例:

set.seed(314)

df <- data.frame(id = 1:5,
                 DX1 = sample(1:10,5),
                 DX2 = sample(1:10,5),
                 DX3 = sample(1:10,5))

require(dplyr)
require(tidyr)

df %>% 
  gather(key,value,-id) %>%
  filter(value %in% 1:2)

或仅使用基础 R

df.long <- do.call(rbind,lapply(df[,2:4],function(x) data.frame(id = df$id, DX = x)))

df.long[df.long$DX %in% 1:2, ]

【讨论】:

  • 感谢您的建议。我不确定 sample(1:10,5) 的目的是什么
【解决方案2】:

我们可以使用filter_atany_vars

df %>% 
  filter_at(vars(matches("DX\\d+")), any_vars(. %in% DXrange))

在哪里

DXrange <- 41000:41091

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 2013-09-02
    相关资源
    最近更新 更多