Reputation: 5709
I want to get the minimum of two columns and create a column in the same data.frame. How can I do that?
For example:
ID Parm1 Parm2
1 1 2
2 0 1
3 2 1
4 1 0
5 2 0
Desired output :
ID Parm1 Parm2 Min
1 1 2 1
2 0 1 0
3 2 1 1
4 1 0 0
5 2 0 0
Upvotes: 36
Views: 63032
Reputation: 1388
In tidyverse universe, using dplyr
package:
library(dplyr)
dat <- read.table(text = "ID Parm1 Parm2
1 1 2
2 0 1
3 2 1
4 1 0
5 2 0", header = TRUE)
dat %>%
rowwise() %>%
mutate(min = min(Parm1, Parm2))
#> # A tibble: 5 x 4
#> # Rowwise:
#> ID Parm1 Parm2 min
#> <int> <int> <int> <int>
#> 1 1 1 2 1
#> 2 2 0 1 0
#> 3 3 2 1 1
#> 4 4 1 0 0
#> 5 5 2 0 0
Created on 2020-11-15 by the reprex package (v0.3.0)
Upvotes: 16
Reputation: 174778
You want the parallel minimum implemented in function pmin()
. For example using your data:
dat <- read.table(text = "ID Parm1 Parm2
1 1 2
2 0 1
3 2 1
4 1 0
5 2 0", header = TRUE)
you can use transform()
to add the min
column as the output of pmin(Parm1, Parm2)
and access the elements of dat
without indexing:
dat <- transform(dat, min = pmin(Parm1, Parm2))
This gives:
> dat
ID Parm1 Parm2 min
1 1 1 2 1
2 2 0 1 0
3 3 2 1 1
4 4 1 0 0
5 5 2 0 0
Upvotes: 42