[R] writing a function to work with dplyr::mutate()
Steven Rigatti
@jr|g@tt| @end|ng |rom gm@||@com
Tue Jan 19 22:51:17 CET 2021
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.
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]]
More information about the R-help
mailing list