[R] data.table/ifelse conditional new variable question

Kate Ignatius kate.ignatius at gmail.com
Sun Aug 17 02:02:30 CEST 2014


Thanks!

I think I know what is being done here but not sure how to fix the
following error:

Error in l$PID[l$\Relationship == "sibling"] <- l$Sample.ID[father] :
  replacement has length zero



On Sat, Aug 16, 2014 at 6:48 PM, Jorge I Velez <jorgeivanvelez at gmail.com> wrote:
> Dear Kate,
>
> Assuming you have nuclear families, one option would be:
>
> x <- read.table(textConnection("Family.ID Sample.ID Relationship
> 14           62  sibling
> 14          94  father
> 14           63  sibling
> 14           59 mother
> 17         6004  father
> 17           6003 mother
> 17         6005   sibling
> 17         368   sibling
> 130           202 mother
> 130           203  father
> 130           204   sibling
> 130           205   sibling
> 130           206   sibling
> 222         9 mother
> 222         45  sibling
> 222         34  sibling
> 222         10  sibling
> 222         11  sibling
> 222         18  father"), header = TRUE)
> closeAllConnections()
>
> xs <- with(x, split(x, Family.ID))
> res <- do.call(rbind, lapply(xs, function(l){
> l$PID <- l$MID <- 0
> father <- with(l, Relationship == 'father')
> mother <- with(l, Relationship == 'mother')
> l$PID[l$Relationship == 'sibling'] <- l$Sample.ID[father]
> l$MID[l$Relationship == 'sibling'] <- l$Sample.ID[mother]
> l
> }))
> res
>
> HTH,
> Jorge.-
>
>
> Best regards,
> Jorge.-
>
>
>
> On Sun, Aug 17, 2014 at 5:42 AM, Kate Ignatius <kate.ignatius at gmail.com>
> wrote:
>>
>> Hi,
>>
>> I have a data.table question (as well as if else statement query).
>>
>> I have a large list of families (file has 935 individuals that are
>> sorted by famiy of varying sizes).  At the moment the file has the
>> columns:
>>
>> SampleID FamilyID Relationship
>>
>> To prevent from having to make a pedigree file by hand - ie adding a
>> PaternalID and a MaternalID one by one I want to try write a script
>> that will quickly do this for me  (I eventually want to run this
>> through a program such as plink)   Is there a way to use data.table
>> (maybe in conjucntion with ifelse to do this effectively)?
>>
>> An example of the file is something like:
>>
>> Family.ID Sample.ID Relationship
>> 14           62  sibling
>> 14          94  father
>> 14           63  sibling
>> 14           59 mother
>> 17         6004  father
>> 17           6003 mother
>> 17         6005   sibling
>> 17         368   sibling
>> 130           202 mother
>> 130           203  father
>> 130           204   sibling
>> 130           205   sibling
>> 130           206   sibling
>> 222         9 mother
>> 222         45  sibling
>> 222         34  sibling
>> 222         10  sibling
>> 222         11  sibling
>> 222         18  father
>>
>> But the goal is to have a file like this:
>>
>> Family.ID Sample.ID Relationship PID MID
>> 14           62  sibling 94 59
>> 14          94  father 0 0
>> 14           63  sibling 94 59
>> 14           59 mother 0 0
>> 17         6004  father 0 0
>> 17           6003 mother 0 0
>> 17         6005   sibling 6004 6003
>> 17         368   sibling 6004 6003
>> 130           202 mother 0 0
>> 130           203  father 0 0
>> 130           204   sibling 203 202
>> 130           205   sibling 203 202
>> 130           206   sibling 203 202
>> 222         9 mother 0 0
>> 222         45  sibling 18 9
>> 222         34  sibling 18 9
>> 222         10  sibling 18 9
>> 222         11  sibling 18 9
>> 222         18  father 0 0
>>
>> I've tried searches for this but with no luck.  Greatly appreciate any
>> help - even if its just a link to a great example/solution!
>>
>> Thanks!
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
>



More information about the R-help mailing list