[R] writing a function to work with dplyr::mutate()

David Winsemius dw|n@em|u@ @end|ng |rom comc@@t@net
Tue Jan 19 23:46:31 CET 2021



Sent from my iPhone

> On Jan 19, 2021, at 1:52 PM, Steven Rigatti <sjrigatti using gmail.com> wrote:
> 
> I use case_when a lot - but I have a lot of dynamic tables to treat this
> way and case_when has to be hard-coded.

But, but, but .... my case_when-based illustration let you pass a parameter dataframe that contains a translation table.

— 
David. 
> 
>> On Tue, Jan 19, 2021 at 3:48 PM Jeff Newmiller <jdnewmil using dcn.davis.ca.us>
>> wrote:
>> 
>> Second this. There is also the findInterval function, which omits the
>> factor attributes and just returns integers that can be used in lookup
>> tables.
>> 
>>> On January 19, 2021 10:33:59 AM PST, Bert Gunter <bgunter.4567 using gmail.com>
>>> wrote:
>>> If you are willing to entertain another approach, have a look at ?cut.
>>> By
>>> defining the 'breaks' argument appropriately, you can easily create a
>>> factor that tells you which values should be looked up and which
>>> accepted
>>> as is. If I understand correctly, this seems to be what you want. If I
>>> have
>>> not, just ignore and wait for a more useful reply.
>>> 
>>> Cheers,
>>> Bert
>>> 
>>> Bert Gunter
>>> 
>>> "The trouble with having an open mind is that people keep coming along
>>> and
>>> sticking things into it."
>>> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
>>> 
>>> 
>>> On Tue, Jan 19, 2021 at 10:24 AM Steven Rigatti <sjrigatti using gmail.com>
>>> wrote:
>>> 
>>>> I am having some problems with what seems like a pretty simple issue.
>>> I
>>>> have some data where I want to convert numbers. Specifically, this is
>>>> cancer data and the size of tumors is encoded using millimeter
>>>> measurements. However, if the actual measurement is not available the
>>>> coding may imply a less specific range of sizes. For instance numbers
>>> 0-89
>>>> may indicate size in mm, but 90 indicates "greater than 90 mm" , 91
>>>> indicates "1 to 2 cm", etc. So, I want to translate 91 to 90, 92 to
>>> 15,
>>>> etc.
>>>> 
>>>> I have many such tables so I would like to be able to write a
>>> function
>>>> which takes as input a threshold over which new values need to be
>>> looked
>>>> up, and the new lookup table, returning the new values.
>>>> 
>>>> I successfully wrote the function:
>>>> 
>>>> translate_seer_numeric <- function(var, upper, lookup) {
>>>>    names(lookup) <- c('old','new')
>>>>    names(var) <- 'old'
>>>>    var <- as.data.frame(var)
>>>>    lookup2 <- data.frame(old = c(1:upper),
>>>>                          new = c(1:upper))
>>>>    lookup3 <- rbind(lookup, lookup2)
>>>> print(var)
>>>>    res <- left_join(var, lookup3, by = 'old') %>%
>>>>         select(new)
>>>> 
>>>>    res
>>>> 
>>>> }
>>>> 
>>>> test1 <- data.frame(old = c(99,95,93, 8))lup <- data.frame(bif =
>>> c(93, 95,
>>>> 99),
>>>>                  new = c(3, 5, NA))
>>>> translate_seer_numeric(test1, 90, lup)
>>>> 
>>>> The above test generates the desired output:
>>>> 
>>>>  old1  992  953  934   8
>>>>  new1  NA2   53   34   8
>>>> 
>>>> My problem comes when I try to put this in line with pipes and the
>>> mutate
>>>> function:
>>>> 
>>>> test1 %>%
>>>>     mutate(varb = translate_seer_numeric(var = old, 90, lup))####
>>>> Error: Problem with `mutate()` input `varb`.
>>>> x Join columns must be present in data.
>>>> x Problem with `old`.
>>>> i Input `varb` is `translate_seer_numeric(var = test1$old, 90, lup)`.
>>>> 
>>>> Thoughts??
>>>> 
>>>>        [[alternative HTML version deleted]]
>>>> 
>>>> ______________________________________________
>>>> R-help using 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.
>>>> 
>>> 
>>>      [[alternative HTML version deleted]]
>>> 
>>> ______________________________________________
>>> R-help using 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.
>> 
>> --
>> Sent from my phone. Please excuse my brevity.
>> 
> 
>    [[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help using 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.



More information about the R-help mailing list