min for each row in a data frame
Solution 1
You can use apply
to go through each row
apply(df, 1, FUN = min)
Where 1
means to apply FUN
to each row of df, 2
would mean to apply FUN
to columns.
To remove missing values, use:
apply(df, 1, FUN = min, na.rm = TRUE)
Solution 2
We could use pmin
, which finds the parallel minima of sets of values. Since our df
is technically a list, we will need to run it via do.call
.
df$min <- do.call(pmin, df)
which gives
df
# x y min
# 1 1 1 1
# 2 2 5 2
# 3 7 4 4
Data:
df <- data.frame(x = c(1, 2, 7), y = c(1, 5, 4))
Furthermore, if na.rm = TRUE
is needed, you can do
df$min <- do.call(pmin, c(df, na.rm = TRUE))
Solution 3
We could also use rowMins
from library(matrixStats)
library(matrixStats)
df$minIwant <- rowMins(as.matrix(df))
Solution 4
Just want to add on how you can also do this with dplyr.
library(dplyr)
x<-c(1,2,7)
y<-c(1,5,4)
df <- data.frame(x,y)
df %>% rowwise() %>% mutate(minIget = min(x, y))
# A tibble: 3 x 3
x y minIget
<dbl> <dbl> <dbl>
1 1. 1. 1.
2 2. 5. 2.
3 7. 4. 4.
Rob
Updated on August 04, 2021Comments
-
Rob almost 3 years
I'm try to calculate minimum across multiple columns (row-wise
min
) in a data frame, but themin
function automatically returns the minimum across the whole of each column rather than for each row separately. I'm sure I'm missing something really simple here? Any ideas much appreciated.x <- c(1,2,7) y <- c(1,5,4) minIwant <- c(1,2,4) df <- data.frame(x, y, minIwant) df$minIget <- min(df$x,df$y) df x y minIwant minIget 1 1 1 1 1 2 2 5 2 1 3 7 4 4 1