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> ceci ne fonctionne pas: P> d[
-which(d == min(d))[1] &
-which(d == max(d))[1]
]
4 Réponses :
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
rappelée après avoir regardé la réponse de @rich Pauloo, nous pouvons utiliser directement ici Certaines autres variations pourraient être p> si vous souhaitez utiliser quel.max code> et
qui.min code> pour obtenir Index de la valeur minimale et maximale p>
quel.max code> /
qui.min code> s'assurera que vous obtenez l'index de premier minimum et maximum respectivement pour chaque ligne. p>
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
Vous étiez très proche! Avec Utilisez lie ces indices dans un nouveau vecteur avec Utilisez Voici un exemple pour copier / coller: p> data.frame code> s Vous devez utiliser une virgule entre crochets pour accomplir Substance de la colonne de rangée .
qui.max () code> et
quel.min () code> Pour renvoyer l'index des valeurs max et min d'un vecteur, respectivement. p> li>
c () code>. p> li>
- code> et le vecteur de 2. Pour sous-ensemble votre trame de données pour les lignes souhaitées. p> li>
ol>
FYI: qui.max (d $ a) code> est identique à
qui (d $ a == max (d $ a) code>.
Non ce n'est pas. qui.max code> et
quel.min code> renvoie le premier coup,
qui (d $ a == max (d $ a)) code> retourne tous eux.
Bon droit. Ce que j'ai dit est vrai seulement quand il y a un b> 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 () code> sur l'ensemble de données. Ceci a fonctionné avec la solution
Apply () CODE> Solution mentionnée. ci-dessus)
Data [22,5: 13] [- C (quel.min (données [22,5: 13]), qui.max (données [22,5: 13])),] code >
Nous pouvons utiliser
t(apply(df, 1, function(x) x[!x %in% range(x)]))
Ce n'est pas clair ce que vous essayez de faire. En ce moment, si
d code> est un
data.frame code> Vous déposez des colonnes entières, pas des lignes ou des éléments de ces lignes.