2010-09-29 5 views
25

En R, si vous testez une condition sur un vecteur au lieu d'un scalaire, il retourne un vecteur contenant le résultat de la comparaison pour chaque valeur dans le vecteur. Par exemple ...nombre de nombre de valeurs de vecteur dans la gamme avec R

> v <- c(1,2,3,4,5) 
> v > 2 
[1] FALSE FALSE TRUE TRUE TRUE 

De cette façon, je peux déterminer le nombre d'éléments dans un vecteur qui sont au-dessus ou en dessous d'un certain nombre, comme ainsi.

> sum(v > 2) 
[1] 3 
> sum(v < 2) 
[1] 1 

Est-ce que quelqu'un sait comment je peux déterminer le nombre de valeurs dans une plage donnée? Par exemple, comment déterminer le nombre de valeurs supérieures à 2 mais inférieures à 5?

Répondre

35

Essayez

> sum(v > 2 & v < 5) 
+0

C'était si facile que je suis gêné. La première chose que j'ai essayé était quelque chose comme ça, sauf que j'ai utilisé && comme opérateur logique et au lieu de &. Je suis tellement habitué à l'utiliser dans d'autres langues. Quelle est la différence entre '&' et '&&' dans R? –

+3

&& est utilisé pour les vecteurs de longueur 1. & fonctionne sur chaque élément d'un vecteur. – stevendesu

+2

R-intro, ch. 9.2.1 – aL3xa

0

utilisation qui:

set.seed(1) 
x <- sample(10, 50, replace = TRUE) 
length(which(x > 3 & x < 5)) 
# [1] 6 
4

Il y a aussi les% <% et% < =% des opérateurs de comparaison dans le paquet TeachingDemos qui vous permettent de le faire comme:

sum(2 %<% x %<% 5) 
sum(2 %<=% x %<=% 5) 

qui donne les mêmes résultats que:

sum(2 < x & x < 5) 
sum(2 <= x & x <= 5) 

Ce qui est mieux est probablement plus une question de préférence personnelle.

+0

C'est certainement utile. J'ai essayé quelque chose comme ça mais j'ai eu des erreurs de syntaxe. C'est comme ça que j'écrirais sur papier ou sur LaTeX, donc c'est bon à savoir. En passant, je suppose que vous vouliez dire x% <=% 5 et non x% <= 5%. –

+0

Merci d'avoir attrapé le% qui a essayé de flotter, je l'ai réparé maintenant. –

Questions connexes