0
votes

En excluant la valeur minimale et maximale

Je veux exclure le minimum ainsi que la valeur maximale de chaque ligne dans une trame de données. (Si l'une de ces valeurs est répétée, un seul doit être exclu.)

Je peux exclure le minimum ou le maximum, mais pas à la fois. Je ne semble pas trouver un moyen de combiner ceux qui fonctionnent (qui fonctionnent bien à eux-mêmes): p> xxx pré>

ceci ne fonctionne pas: P>

d[

  -which(d == min(d))[1] &

  -which(d == max(d))[1]

  ]


1 commentaires

Ce n'est pas clair ce que vous essayez de faire. En ce moment, si d est un data.frame Vous déposez des colonnes entières, pas des lignes ou des éléments de ces lignes.


4 Réponses :


0
votes

Ceci éliminera les lignes contenant les valeurs min et max de score comme indiqué dans l'exemple de cadre de données.

library(tidyverse)
df <- tribble(~name, ~score,
              'John', 10,
              'Mike', 2,
              'Mary', 11, 
              'Jane', 1,
              'Jill', 5)



df %>% 
  arrange(score)  %>% 
  slice(-1, -nrow(.))

# A tibble: 3 x 2
  name  score
  <chr> <dbl>
1 Mike      2
2 Jill      5
3 John     10


0 commentaires

2
votes

mise à jour forte>

rappelée après avoir regardé la réponse de @rich Pauloo, nous pouvons utiliser directement quel.max code> et qui.min code> pour obtenir Index de la valeur minimale et maximale p> xxx pré>

ici quel.max code> / qui.min code> s'assurera que vous obtenez l'index de premier minimum et maximum respectivement pour chaque ligne. p>


Certaines autres variations pourraient être p> xxx pré>

si vous souhaitez utiliser qui Nous pouvons faire P>

set.seed(1234)
df <- as.data.frame(matrix(sample(25), 5, 5))
df

#  V1 V2 V3 V4 V5
#1  3 13 11 16  6
#2 15  1  8 25 18
#3 24  5  4 10 21
#4 14 12 17  2 22
#5 19  9 20  7 23


0 commentaires

1
votes

Vous étiez très proche! Avec data.frame s Vous devez utiliser une virgule entre crochets pour accomplir Substance de la colonne de rangée .

  1. Utilisez qui.max () et quel.min () Pour renvoyer l'index des valeurs max et min d'un vecteur, respectivement.

  2. lie ces indices dans un nouveau vecteur avec c () .

  3. Utilisez - et le vecteur de 2. Pour sous-ensemble votre trame de données pour les lignes souhaitées.

    Voici un exemple pour copier / coller: xxx


5 commentaires

FYI: qui.max (d $ a) est identique à qui (d $ a == max (d $ a) .


Non ce n'est pas. qui.max et quel.min renvoie le premier coup, qui (d $ a == max (d $ a)) retourne tous eux.


Bon droit. Ce que j'ai dit est vrai seulement quand il y a un maximum. Merci d'avoir fait remarquer cela!


haha pas de soucis! Je suis dedans pour les puzzles et l'apprentissage (et vous me rappelez une chose). =)


@Richpaulo: Merci, en effet, c'est presque ce que j'avais, et j'ai peut-être même été là à un moment donné. Mais cela ne fonctionne toujours pas ... Si je l'essaie d'un exemple de ligne de ma trame de données, le résultat est vide. (Mon plan est de remplacer le numéro de ligne avec I et d'utiliser A pour boucle et RowMeans () sur l'ensemble de données. Ceci a fonctionné avec la solution Apply () Solution mentionnée. ci-dessus) Data [22,5: 13] [- C (quel.min (données [22,5: 13]), qui.max (données [22,5: 13])),]



0
votes

Nous pouvons utiliser

t(apply(df, 1, function(x) x[!x %in% range(x)]))


0 commentaires