获取两列的最小值

Ian*_*the 19 r

我想获得最少两列并在同一data.frame中创建一列.我怎样才能做到这一点?

例如:

ID    Parm1   Parm2
 1      1       2
 2      0       1
 3      2       1
 4      1       0
 5      2       0
Run Code Online (Sandbox Code Playgroud)

期望的输出:

ID    Parm1    Parm2     Min
 1      1        2        1
 2      0        1        0
 3      2        1        1
 4      1        0        0
 5      2        0        0
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助.

Rei*_*son 27

您希望在函数中实现并行最小值pmin().例如,使用您的数据:

dat <- read.table(text = "ID    Parm1   Parm2
 1      1       2
 2      0       1
 3      2       1
 4      1       0
 5      2       0", header = TRUE)
Run Code Online (Sandbox Code Playgroud)

您可以使用transform()添加min列作为输出pmin(Parm1, Parm2)并访问dat没有索引的元素:

dat <- transform(dat, min = pmin(Parm1, Parm2))
Run Code Online (Sandbox Code Playgroud)

这给出了:

> 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
Run Code Online (Sandbox Code Playgroud)

  • 并且`do.call(pmin,dat [-1])`如果你有许多变量并且只想排除第一个`ID`变量并保存输入. (2认同)

Fab*_*rea 8

以data.table方式:dat [, min := pmin(Parm1, Parm2)]


jos*_*rrà 5

在 tidyverse Universe 中,使用dplyr包:

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
Run Code Online (Sandbox Code Playgroud)

reprex 包(v0.3.0)于 2020 年 11 月 15 日创建

  • 如果有很多列,并且您只想排除列“ID”变量,类似于@thelatemail评论中的建议,请使用“dat %&gt;% rowwise() %&gt;% mutate(min = min(c_across(!ID)) ))` 并保存输入。 (3认同)