带有R中数据帧的每一行的最小值

时间:2016-01-08 17:59:13

标签: r max min

我尝试在数据框中的多个列中执行一个简单的最小值,但min函数会自动在整个每列中返回min,而不是分别为每一行返回min。我确定我在这里错过了一些非常简单的东西吗?任何想法都非常赞赏。

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

4 个答案:

答案 0 :(得分:20)

您可以使用apply浏览每一行

apply(df, 1, FUN=min)

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

答案 1 :(得分:3)

我们可以使用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))

答案 2 :(得分:2)

我们也可以使用rowMins

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

答案 3 :(得分:1)

只想添加如何使用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.