39 votes

Y a-t-il un parallèle vectorisé max() et min() ?

J'ai un data.frame avec les colonnes "a" et "b". Je veux ajouter des colonnes appelées "haut" et "bas" qui contiennent le plus haut et le plus bas parmi les colonnes a et b.

Existe-t-il un moyen de le faire sans boucler les lignes dans la trame de données ?

edit : c'est pour les données OHLC, et donc la colonne haut et bas doit contenir l'élément le plus haut et le plus bas entre a et b sur la même ligne, et non parmi les colonnes entières. désolé si cela est mal formulé.

45voto

NPE Points 169956

On dirait que vous recherchez pmax et pmin (max/min "parallèle") :

Extremes                 package:base                  R Documentation

Maxima and Minima

Description:

     Returns the (parallel) maxima and minima of the input values.

Usage:

     max(..., na.rm = FALSE)
     min(..., na.rm = FALSE)

     pmax(..., na.rm = FALSE)
     pmin(..., na.rm = FALSE)

     pmax.int(..., na.rm = FALSE)
     pmin.int(..., na.rm = FALSE)

Arguments:

     ...: numeric or character arguments (see Note).

   na.rm: a logical indicating whether missing values should be
          removed.

Details:

     ‘pmax' and ‘pmin' take one or more vectors (or matrices) as
     arguments and return a single vector giving the ‘parallel' maxima
     (or minima) of the vectors.  The first element of the result is
     the maximum (minimum) of the first elements of all the arguments,
     the second element of the result is the maximum (minimum) of the
     second elements of all the arguments and so on.  Shorter inputs
     are recycled if necessary.  ‘attributes' (such as ‘names' or
     ‘dim') are transferred from the first argument (if applicable).

0voto

Wojciech Sobala Points 2950

Si le nom de votre data.frame est dat.

dat$pmin <- do.call(pmin,dat[c("a","b")])
dat$pmax <- do.call(pmax,dat[c("a","b")])

0voto

Joshua Ulrich Points 68776

Autre solution possible :

set.seed(21)
Data <- data.frame(a=runif(10),b=runif(10))
Data$low <- apply(Data[,c("a","b")], 1, min)
Data$high <- apply(Data[,c("a","b")], 1, max)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X