Dear Ellison, thank you for the feedback, we replaced dplyr::if_else with 
dplyr::case_when and it seems to do the trick.

Still, we have to write several statements to match all the respective years 
but it's working.

Let me see how we can implement your suggestion.

Regards
------------------
Kevin Wamae
On 26/02/2018, 14:57, "S Ellison" <s.elli...@lgcgroup.com> wrote:

    That many ifelse statements is obviously rather a pain.
    
    Would you not have got what you want with 
    
    ... paste("survey", year, sep="_") 
    ?
    
    If that is not what you're looking for (eg because 'year' is the 
observation year and not the study start year), perhaps something that picks 
the minimum year for a subject or other relevant group might work? For example
    paste("survey", ave(year, studyno, FUN=min), sep="_")
    
    
    S Ellison
    
    > -----Original Message-----
    > From: R-help [mailto:r-help-boun...@r-project.org] On Behalf Of Kevin
    > Wamae
    > Sent: 21 February 2018 20:34
    > To: R-help@r-project.org
    > Subject: [R] alternative for multiple if_else statements
    > 
    > Hi, I am having trouble trying to figure out why if_else is behaving the 
way it is,
    > it may be my code or the way the data is structured.
    > 
    > Below is a snapshot of a database am working on and it represents a
    > longitudinal survey of study participants in a trial with weekly follow 
up.
    > 
    > The variable "survey_start" represents the start of the study-defined one 
year
    > follow up (which we called "survey_year").
    > 
    > I am trying to populate all subsequent entries for each participant, per 
survey
    > year, with the entry "survey" followed by an underscore and the respective
    > year, eg. survey_2014.
    > 
    > There are missing entries such as the participant represented here, wasn't
    > available at the start of the 2015 survey. Also, some participants don’t 
have
    > complete one-year follow ups but I still need to include them.
    > 
    > I have written two codes, first one fails while the second works, the only
    > difference being I have reversed the order in which the entries are 
populated in
    > the second code (from 2007-2016 to 2016-2007) and removed the if_else
    > statement for 2015. Also noticed, that for the second code, which spans 
the
    > years 2007-2016 (less 2015), if a participants entries start from 
2010-2016, the
    > code fails.
    > 
    > Kindly assist in figuring this out...or better yet, an alternative.
    > 
    >     trialData <- structure(list(study = c("site_1", "site_1", "site_1", 
"site_1",
    > "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", 
"site_1",
    > "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", 
"site_1",
    > "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", 
"site_1",
    > "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", 
"site_1",
    > "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", 
"site_1",
    > "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", 
"site_1",
    > "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", 
"site_1",
    > "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", 
"site_1",
    > "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", 
"site_1",
    > "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", 
"site_1",
    > "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", 
"site_1",
    > "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", 
"site_1",
    > "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", 
"site_1",
    > "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", 
"site_1",
    > "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", "site_1", 
"site_1",
    > "site_1"), studyno = c("child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1", "child_1", "child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1", "child_1", "child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1", "child_1", "child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1", "child_1", "child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1", "child_1", "child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1", "child_1", "child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1", "child_1", "child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1", "child_1", "child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1", "child_1", "child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1", "child_1", "child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1", "child_1", "child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1", "child_1", "child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1", "child_1", "child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1", "child_1", "child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1", "child_1", "child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1", "child_1", "child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1", "child_1", "child_1", "child_1", "child_1", "child_1", 
"child_1",
    > "child_1"), date = structure(c(16078, 16085, 16092, 16098, 16104, 16115,
    > 16121, 16129, 16135, 16140, 16146, 16156, 16162, 16168, 16177, 16185,
    > 16191, 16195, 16203, 16210, 16217, 16225, 16234, 16237, 16246, 16253,
    > 16262, 16269, 16278, 16283, 16288, 16297, 16304, 16311, 16319, 16326,
    > 16332, 16337, 16346, 16353, 16360, 16366, 16370, 16381, 16384, 16395,
    > 16399, 16407, 16415, 16422, 16444, 16452, 16454, 16467, 16474, 16477,
    > 16484, 16490, 16501, 16508, 16514, 16520, 16529, 16533, 16539, 16550,
    > 16556, 16564, 16566, 16578, 16582, 16593, 16599, 16604, 16613, 16620,
    > 16623, 16635, 16636, 16654, 16660, 16666, 16673, 16681, 16688, 16693,
    > 16702, 16706, 16714, 16721, 16728, 16734, 16745, 16749, 16757, 16764,
    > 16769, 16778, 16785, 16792, 16805, 16812, 16819, 16830, 16832, 16839,
    > 16846, 16856, 16862, 16867, 16877, 16884, 16890, 16898, 16904, 16912,
    > 16917, 16923, 16936, 16938, 16953, 16960, 16966, 16973, 16980), class =
    > "Date"), year = c(2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L,
    > 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 
2014L,
    > 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 
2014L,
    > 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 
2014L,
    > 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2015L, 
2015L,
    > 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 
2015L,
    > 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 
2015L,
    > 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 
2015L,
    > 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 
2015L,
    > 2015L, 2015L, 2015L, 2015L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 
2016L,
    > 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 
2016L,
    > 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L), month = c(1L, 1L, 1L, 
1L, 2L,
    > 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 
6L, 6L, 7L, 7L,
    > 7L, 7L, 8L, 8L, 8L, 8L, 8L, 9L, 9L, 9L, 9L, 10L, 10L, 10L, 10L, 10L, 11L, 
11L, 11L,
    > 11L, 12L, 12L, 12L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 
4L, 4L, 4L, 5L,
    > 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 9L, 9L, 
9L, 9L, 9L, 10L,
    > 10L, 10L, 10L, 11L, 11L, 11L, 11L, 11L, 12L, 12L, 12L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L,
    > 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L), 
survey_start =
    > c("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"Y", "", "", "", "", "", "", "",
    > "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "",
    > "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "",
    > "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "",
    > "", "", "", "", "", "", "", "Y", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "")), class =
    > "data.frame", row.names = c(NA, -125L), .Names = c("study", "studyno", 
"date",
    > "year", "month",
    > "survey_start"))
    > 
    > 
    > code 1 fails:
    > 
    > trialData <- trialData %>% arrange(studyno, date) %>% group_by(studyno) 
%>%
    > mutate(survey_year = if_else(date >= date[survey_start == "Y" & year == 
2007
    > & study == "site_1"][1] & date < date[month == 5 & year == 2008 & study ==
    > "site_1"][1], "survey_2007",
    >                      if_else(date >= date[survey_start == "Y" & year == 
2008 & study
    > == "site_1"][1] & date < date[month == 4 & year == 2009 & study ==
    > "site_1"][1], "survey_2008",
    >                      if_else(date >= date[survey_start == "Y" & year == 
2009 & study
    > == "site_1"][1] & date < date[month == 5 & year == 2010 & study ==
    > "site_1"][1], "survey_2009",
    >                      if_else(date >= date[survey_start == "Y" & year == 
2010 & study
    > == "site_1"][1] & date < date[month == 5 & year == 2011 & study ==
    > "site_1"][1], "survey_2010",
    >                      if_else(date >= date[survey_start == "Y" & year == 
2011 & study
    > == "site_1"][1] & date < date[month == 4 & year == 2012 & study ==
    > "site_1"][1], "survey_2011",
    >                      if_else(date >= date[survey_start == "Y" & year == 
2012 & study
    > == "site_1"][1] & date < date[month == 4 & year == 2013 & study ==
    > "site_1"][1], "survey_2012",
    >                      if_else(date >= date[survey_start == "Y" & year == 
2013 & study
    > == "site_1"][1] & date < date[month == 4 & year == 2014 & study ==
    > "site_1"][1], "survey_2013",
    >                      if_else(date >= date[survey_start == "Y" & year == 
2014 & study
    > == "site_1"][1] & date < date[month == 4 & year == 2015 & study ==
    > "site_1"][1], "survey_2014",
    >                      if_else(date >= date[survey_start == "Y" & year == 
2015 & study
    > == "site_1"][1] & date < date[month == 3 & year == 2016 & study ==
    > "site_1"][1], "survey_2015",
    >                      if_else(date >= date[survey_start == "Y" & year == 
2016 & study
    > == "site_1"][1], "survey_2016","")))))))))))
    > 
    > code 2 works:
    > 
    >     trialData <- trialData %>% arrange(studyno, date) %>% 
group_by(studyno)
    > %>%
    >   mutate(survey_year = if_else(date >= date[survey_start == "Y" & year == 
2016
    > & study == "site_1"][1]                                                   
            , "survey_2016",
    >                            if_else(date >= date[survey_start == "Y" & 
year == 2014 &
    > study == "site_1"][1] & date < date[month == 4 & year == 2015 & study ==
    > "site_1"][1], "survey_2014",
    >                            if_else(date >= date[survey_start == "Y" & 
year == 2013 &
    > study == "site_1"][1] & date < date[month == 4 & year == 2014 & study ==
    > "site_1"][1], "survey_2013",
    >                            if_else(date >= date[survey_start == "Y" & 
year == 2012 &
    > study == "site_1"][1] & date < date[month == 4 & year == 2013 & study ==
    > "site_1"][1], "survey_2012",
    >                            if_else(date >= date[survey_start == "Y" & 
year == 2011 &
    > study == "site_1"][1] & date < date[month == 4 & year == 2012 & study ==
    > "site_1"][1], "survey_2011",
    >                            if_else(date >= date[survey_start == "Y" & 
year == 2010 &
    > study == "site_1"][1] & date < date[month == 5 & year == 2011 & study ==
    > "site_1"][1], "survey_2010",
    >                            if_else(date >= date[survey_start == "Y" & 
year == 2009 &
    > study == "site_1"][1] & date < date[month == 5 & year == 2010 & study ==
    > "site_1"][1], "survey_2009",
    >                            if_else(date >= date[survey_start == "Y" & 
year == 2008 &
    > study == "site_1"][1] & date < date[month == 4 & year == 2009 & study ==
    > "site_1"][1], "survey_2008",
    >                            if_else(date >= date[survey_start == "Y" & 
year == 2007 &
    > study == "site_1"][1] & date < date[month == 5 & year == 2008 & study ==
    > "site_1"][1], "survey_2007",""))))))))))
    > 
    > ________________________________________________________________
    > ______
    > 
    > This e-mail contains information which is confidential. It is intended 
only for the
    > use of the named recipient. If you have received this e-mail in error, 
please let
    > us know by replying to the sender, and immediately delete it from your 
system.
    > Please note, that in these circumstances, the use, disclosure, 
distribution or
    > copying of this information is strictly prohibited. KEMRI-Wellcome Trust
    > Programme cannot accept any responsibility for the  accuracy or 
completeness
    > of this message as it has been transmitted over a public network. 
Although the
    > Programme has taken reasonable precautions to ensure no viruses are 
present
    > in emails, it cannot accept responsibility for any loss or damage arising 
from
    > the use of the email or attachments. Any views expressed in this message 
are
    > those of the individual sender, except where the sender specifically 
states them
    > to be the views of KEMRI-Wellcome Trust Programme.
    > ________________________________________________________________
    > ______
    > 
    >   [[alternative HTML version deleted]]
    > 
    > ______________________________________________
    > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
    > 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.
    
    
    *******************************************************************
    This email and any attachments are confidential. Any use, copying or
    disclosure other than by the intended recipient is unauthorised. If 
    you have received this message in error, please notify the sender 
    immediately via +44(0)20 8943 7000 or notify postmas...@lgcgroup.com 
    and delete this message and any copies from your computer and network. 
    LGC Limited. Registered in England 2991879. 
    Registered office: Queens Road, Teddington, Middlesex, TW11 0LY, UK
    


______________________________________________________________________

This e-mail contains information which is confidential. It is intended only for 
the use of the named recipient. If you have received this e-mail in error, 
please let us know by replying to the sender, and immediately delete it from 
your system.  Please note, that in these circumstances, the use, disclosure, 
distribution or copying of this information is strictly prohibited. 
KEMRI-Wellcome Trust Programme cannot accept any responsibility for the  
accuracy or completeness of this message as it has been transmitted over a 
public network. Although the Programme has taken reasonable precautions to 
ensure no viruses are present in emails, it cannot accept responsibility for 
any loss or damage arising from the use of the email or attachments. Any views 
expressed in this message are those of the individual sender, except where the 
sender specifically states them to be the views of KEMRI-Wellcome Trust 
Programme.
______________________________________________________________________
______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.

Reply via email to