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

ros*_*ser 3 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>
Run Code Online (Sandbox Code Playgroud)

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

谢谢大家的时间.

罗斯邓恩MRCPsych

"Te occidere possunt sed te edere ne possunt,nefas est".

Jos*_*ich 9

您接近apply尝试,但MARGIN=2将函数应用于列而不是行.此外,grep返回匹配的位置 ; 你想要的grepl,它返回一个逻辑向量.试试这个:

apply(x[,-1], 1, function(x) any(grepl("Aspirin",x)))
Run Code Online (Sandbox Code Playgroud)

您也可以使用%in%,您可能会发现更直观:

apply(x[,-1], 1, "%in%", x="Aspirin")
Run Code Online (Sandbox Code Playgroud)