基于行成员资格的逻辑向量

时间:2011-02-08 20:23:28

标签: r

感谢您的耐心等待。

我正在处理详细介绍患者和药物的大型数据集。

药物很难编码,因为它们(通常)没有意义,除非与剂量匹配。

我有一个带载体的数据框(Drug1,Drug2 ..... Drug 16),其中个体患者用行表示。 载体实际上是因子,有100个可能的水平(患者可以使用的所有药物)。

我想要做的就是产生一个逻辑向量(TTTTFFFFTTT ......),然后我可以将其转换成一个数据帧,告诉我患者是否患有特定药物。

然后,我可以使用特别重要的药物作为模型中的分类协变量存在或不存在。

我尝试过grep,沿着行搜索,我可以生成一个标识符向量,但我似乎无法生成逻辑向量。

我意识到我做错了。

names(drugindex)
 [1] "book.MRN" "DRUG1"    "DRUG2"    "DRUG3"    "DRUG4"    "DRUG5"  
 [7] "DRUG6"    "DRUG7"    "DRUG8"    "DRUG9"    "DRUG10"   "DRUG11"  
[13] "DRUG12"   "DRUG13"   "DRUG14"   "DRUG15"   "DRUG16"  

> truvec<-drugindex$book.MRN[as.vector(unlist(apply(drugindex[,2:17], 2, grep, pattern="Lamotrigine")))]
> truvec
truvec
[1] 0024633  0008291  0008469  0030599  0027667
37 Levels: 0008291  0008469  0010188  0014217  0014439  0015822  ... 0034262

> head(drugindex)
   book.MRN       DRUG1        DRUG2          DRUG3        DRUG4        DRUG5
4  0008291  Venlafaxine Procyclidine  Flunitrazepam Amisulpiride    Clozapine
31 0008469  Venlafaxine  Mirtazapine        Lithium   Olanzapine   Metoprolol
3  0010188   Flurazepam    Valproate     Olanzapine  Mirtazapine Esomeprazole
13 0014217      Aspirin     Ramipril Zuclopenthixol    Lorazepam  Haloperidol
15 0014439    Zopiclone     Diazepam    Haloperidol  Paracetamol         <NA>
5  0015822   Olanzapine  Venlafaxine        Lithium  Haloperidol   Alprazolam
         DRUG6      DRUG7      DRUG8      DRUG9          DRUG10 DRUG11 DRUG12
4  Lamotrigine Alprazolam    Lithium Alprazolam            <NA>   <NA>   <NA>
31 Lamotrigine   Ramipril Alprazolam   Zolpidem Trifluoperazine   <NA>   <NA>
3  Paracetamol Alprazolam Citalopram       <NA>            <NA>   <NA>   <NA>
13        <NA>       <NA>       <NA>       <NA>            <NA>   <NA>   <NA>
15        <NA>       <NA>       <NA>       <NA>            <NA>   <NA>   <NA>
5         <NA>       <NA>       <NA>       <NA>            <NA>   <NA>   <NA>
   DRUG13 DRUG14 DRUG15 DRUG16
4    <NA>   <NA>   <NA>   <NA>
31   <NA>   <NA>   <NA>   <NA>
3    <NA>   <NA>   <NA>   <NA>
13   <NA>   <NA>   <NA>   <NA>
15   <NA>   <NA>   <NA>   <NA>
5    <NA>   <NA>   <NA>   <NA>

我想要的是每种药物的逻辑矢量,说明患者是否在其上

谢谢大家的时间。

Ross Dunne MRCPsych

“Te occidere possunt sed te edere ne possunt,nefas est”。

2 个答案:

答案 0 :(得分:9)

答案 1 :(得分:4)

首先,评论数据结构。您有一些称为“宽”格式的数据,每个患者有一行,药物有多列。通常的情况是,“长”格式,每个患者的行重新排列和药物的单个列更适合数据操作。要将数据从宽到长重新整形,反之亦然,请查看重塑包。在这种情况下,你会有类似的东西:

library(reshape)
dnow <- melt(drugindex, id.var='book.MRN')
subset(dnow, value=='Lamotrigine')

如果我可以这么说的话,那么清晰,明显的代码......

编辑:如果您需要旧结构,可以使用cast

cast(subset(dnow, value=='Lamotrigine'),  book.MRN ~ value)
@jonw在评论中建议