数据框中每一行的最小值

min for each row in a data frame

我尝试计算数据框中多列(按行 min)的最小值,但是 min 函数自动 returns 整个数据框中的最小值每列而不是每一行分别。我确定我在这里遗漏了一些非常简单的东西?非常感谢任何想法。

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

您可以使用apply遍历每一行

apply(df, 1, FUN = min)

其中 1 表示将 FUN 应用于 df 的每一行,2 表示将 FUN 应用于列。

要删除缺失值,请使用:

apply(df, 1, FUN = min, na.rm = TRUE)

我们也可以使用 library(matrixStats)

中的 rowMins
library(matrixStats)
df$minIwant <- rowMins(as.matrix(df))

只想补充一下如何使用 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.

我们可以使用 pmin,它可以找到值集的平行最小值。由于我们的 df 在技术上是一个列表,我们需要通过 do.call.

运行 它
df$min <- do.call(pmin, df)

这给出了

df
#   x y min
# 1 1 1   1
# 2 2 5   2
# 3 7 4   4

数据:

df <- data.frame(x = c(1, 2, 7), y = c(1, 5, 4))

此外,如果需要na.rm = TRUE,你可以

df$min <- do.call(pmin, c(df, na.rm = TRUE))