0

I want to subtract maximum value of each row across multiple columns. For this I'm using pmax function which works if each column name is passed but I could not figured out how to use : for passing multiple columns. See my code below:

library(tidyverse)
head(iris)
#>   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1          5.1         3.5          1.4         0.2  setosa
#> 2          4.9         3.0          1.4         0.2  setosa
#> 3          4.7         3.2          1.3         0.2  setosa
#> 4          4.6         3.1          1.5         0.2  setosa
#> 5          5.0         3.6          1.4         0.2  setosa
#> 6          5.4         3.9          1.7         0.4  setosa
names(iris)
#> [1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"

iris %>%
  mutate(mak = pmax(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width)) %>% 
  head()
#>   Sepal.Length Sepal.Width Petal.Length Petal.Width Species mak
#> 1          5.1         3.5          1.4         0.2  setosa 5.1
#> 2          4.9         3.0          1.4         0.2  setosa 4.9
#> 3          4.7         3.2          1.3         0.2  setosa 4.7
#> 4          4.6         3.1          1.5         0.2  setosa 4.6
#> 5          5.0         3.6          1.4         0.2  setosa 5.0
#> 6          5.4         3.9          1.7         0.4  setosa 5.4

iris %>%
  mutate(mak = pmax(Sepal.Length:Petal.Width))
#> Warning in Sepal.Length:Petal.Width: numerical expression has 150 elements: only
#> the first used

#> Warning in Sepal.Length:Petal.Width: numerical expression has 150 elements: only
#> the first used
#> Error in `mutate()`:
#> ! Problem while computing `mak = pmax(Sepal.Length:Petal.Width)`.
#> x `mak` must be size 150 or 1, not 5.
MYaseen208
  • 22,666
  • 37
  • 165
  • 309
  • From the duplicate: `iris %>% rowwise() %>% mutate(mak=max(c_across(Sepal.Width:Petal.Length)))` seems to be a decent answer. – MrFlick Feb 25 '22 at 05:34
  • 4
    I would suggest `iris %>% mutate(mak = do.call(pmax, across(Sepal.Length:Petal.Width)))` and avoid `rowwise()` as that will be inefficient where the data has a lot of rows. – Ritchie Sacramento Feb 25 '22 at 05:39

0 Answers0