web-dev-qa-db-fra.com

min pour chaque ligne avec dataframe en R

J'essaie de faire un minimum simple sur plusieurs colonnes d'un bloc de données, mais la fonction min renvoie automatiquement le minimum sur l'ensemble de chaque colonne plutôt que sur chaque ligne séparément. Je suis sûr qu'il me manque quelque chose de vraiment simple ici? Toutes les idées sont très appréciées.

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
8
Rob

Vous pouvez utiliser apply pour parcourir chaque ligne.

apply(df, 1, FUN=min)

Où 1 signifie appliquer FUN à chaque ligne de df, 2 signifie appliquer FUN aux colonnes.

17
nico

Nous pourrions utiliser pmin, qui trouve les minima parallèles d’ensembles de valeurs. Puisque notre df est techniquement une liste, nous devrons l'exécuter via do.call.

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

qui donne

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

Les données:

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

Nous pourrions aussi utiliser rowMins de library(matrixStats)

library(matrixStats)
df$minIwant <- rowMins(as.matrix(df))
2
akrun

Je veux juste ajouter comment vous pouvez aussi faire cela avec 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.
0
Nik Muhammad Naim