[R] help with nesting if else statements

Jeremie Juste jerem|eju@te @end|ng |rom gm@||@com
Thu Sep 24 08:07:11 CEST 2020


Hello Ana Marija,

Apologies, the warning escaped me. When Pheno is assigned NA .
> a=a[,PHENO:=NA]
It is assigned a NA of type logical  by default. We just have to make
sure it is an NA of type numeric

> a[,PHENO:=1.0*NA]

So the full set of commands is:

library(data.table)
setDT(a)
a[,PHENO:=1.0*NA]
a[PLASER==2|RTNPTHY==2,PHENO:=2]
a[is.na(PHENO)&(CURRELIG==1|RTNPTHY==1),PHENO:=1]

Best regards,
Jeremie



Ana Marija <sokovic.anamarija using gmail.com> writes:

> Hi Jeremie,
>
> when I try to reproduce your code this is what I get:
>
>> a=setDT(a)
>> head(a)
>        FID  IID CURRELIG PLASER RTNPTHY
> 1: fam0110 G110        2      2       2
> 2: fam0113 G113        2      2       2
> 3: fam0114 G114        2      2       2
> 4: fam0117 G117        2      2       2
> 5: fam0118 G118        2     NA       2
> 6: fam0119 G119        2      1       2
>> a=a[,PHENO:=NA]
>> head(a)
>        FID  IID CURRELIG PLASER RTNPTHY PHENO
> 1: fam0110 G110        2      2       2    NA
> 2: fam0113 G113        2      2       2    NA
> 3: fam0114 G114        2      2       2    NA
> 4: fam0117 G117        2      2       2    NA
> 5: fam0118 G118        2     NA       2    NA
> 6: fam0119 G119        2      1       2    NA
>> a=a[PLASER==2|RTNPTHY==2,PHENO:=2]
> Warning message:
> In `[.data.table`(a, PLASER == 2 | RTNPTHY == 2, `:=`(PHENO, 2)) :
>   2.000000 (type 'double') at RHS position 1 taken as TRUE when
> assigning to type 'logical' (column 6 named 'PHENO')
>
> Please advise,
> Ana
>
> On Wed, Sep 23, 2020 at 2:48 PM Jeremie Juste <jeremiejuste using gmail.com> wrote:
>>
>>
>> Hello Ana Marija,
>>
>> I cannot reproduce your error,
>>
>> with a$PHENO=ifelse(a$PLASER==2 |a$RTNPTHY==2, 2, ifelse(a$CURRELIG==1 | a$RTNPTHY==1,1,NA))
>> For instance I have the expected PHENO=2
>>
>> >     FID      IID   CURRELIG  PLASER  RTNPTHY PHENO
>> > 39: fam5706 G5706        1      1       2     2
>>
>> In general I find nested ifelse to be difficult to work with especially
>> when I am tired :-). I would suggest this alternative way instead. It uses
>> data.table and you can investigate each step if you need to.
>>
>> library(data.table)
>> setDT(a)
>> a[,PHENO:=NA]
>> a[PLASER==2|RTNPTHY==2,PHENO:=2]
>> a[is.na(PHENO)&(CURRELIG==1|RTNPTHY==1),PHENO:=1]
>>
>>
>> HTH,
>> Jeremie
>>
>> a <- read.table(text="FID,IID,CURRELIG,PLASER,RTNPTHY
>> fam5610,G5610,1,1,1
>> fam5614,G5614,1,2,2
>> fam5615,G5615,1,1,1
>> fam5618,G5618,1,1,2
>> fam5621,G5621,1,1,1
>> fam5624,G5624,1,1,2
>> fam5625,G5625,1,1,1
>> fam5628,G5628,1,2,2
>> fam5633,G5633,1,2,2
>> fam5634,G5634,1,1,1
>> fam5635,G5635,2,2,2
>> fam5636,G5636,1,1,1
>> fam5641,G5641,1,1,1
>> fam5645,G5645,2,1,2
>> fam5646,G5646,2,2,2
>> fam5654,G5654,1,2,2
>> fam5655,G5655,1,2,2
>> fam5656,G5656,2,2,2
>> fam5658,G5658,1,1,1
>> fam5659,G5659,2,2,2
>> fam5660,G5660,1,1,1
>> fam5661,G5661,2,2,2
>> fam5664,G5664,1,1,1
>> fam5666,G5666,1,1,1
>> fam5667,G5667,1,1,2
>> fam5670,G5670,1,1,1
>> fam5671,G5671,1,1,2
>> fam5672,G5672,1,1,2
>> fam5673,G5673,1,1,1
>> fam5680,G5680,1,2,2
>> fam5686,G5686,1,2,2
>> fam5687,G5687,1,2,2
>> fam5688,G5688,1,1,2
>> fam5693,G5693,2,1,1
>> fam5695,G5695,1,1,1
>> fam5697,G5697,1,1,1
>> fam5700,G5700,1,2,2
>> fam5701,G5701,1,1,1
>> fam5706,G5706,1,1,2
>> fam5709,G5709,1,1,1
>> fam5713,G5713,1,1,1
>> fam5715,G5715,1,1,1
>> fam5718,G5718,1,1,1",sep=",", header=TRUE)
>>
>>
>>
>>
>>
>>



More information about the R-help mailing list