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
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.
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))
Nous pourrions aussi utiliser rowMins
de library(matrixStats)
library(matrixStats)
df$minIwant <- rowMins(as.matrix(df))
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.