tchakravarty
tchakravarty

Reputation: 10954

dplyr: Maximum across arbitrary number of variables

I want to take the maximum of a number of variables within a pipe:

library(dplyr)
library(purrr)

df_foo = data_frame(
  a = rnorm(100),
  b = rnorm(100),
  c = rnorm(100)
) %>% 
  mutate(
    `Max 1` = max(a, b, c, na.rm = TRUE),
    `Max 2` = pmap_dbl(list(a, b, c), max, na.rm = TRUE),
    `Max 3` = pmax(a, b, c, na.rm = TRUE)
  )

The purrr::pmap_dbl solution appears to be clunky -- in that it requires specifying the names of the variables as a list. Is there a way to do away with having to use the list keyword so that it is potentially usable programmatically?

Upvotes: 1

Views: 75

Answers (1)

akrun
akrun

Reputation: 886968

We can use . to specify the dataset

df_foo %>%
     mutate(Max2 = pmap_dbl(.l = ., max, na.rm = TRUE))

and suppose, if we are doing on a subset of columns, then

nm1 <- c("a", "b")
df_foo %>%
     mutate(Max2 = pmap_dbl(.l = .[nm1], max, na.rm = TRUE))

Upvotes: 1

Related Questions