web-dev-qa-db-fra.com

Comment créer des vecteurs avec des intervalles spécifiques dans R?

J'ai une question sur la création de vecteurs. Si je fais a <- 1:10, "a" a les valeurs 1,2,3,4,5,6,7,8,9,10.

Ma question est de savoir comment créer un vecteur avec des intervalles spécifiques entre ses éléments. Par exemple, je voudrais créer un vecteur qui a les valeurs de 1 à 100 mais ne compter que par intervalles de 5 pour obtenir un vecteur ayant les valeurs 5,10,15,20, ..., 95,100

Je pense que dans Matlab on peut faire 1:5:100, comment fait-on cela avec R?

Je pourrais essayer de faire 5*(1:20) mais existe-t-il un moyen plus court? (puisque dans ce cas il me faudrait connaître toute la longueur (100) puis diviser par la taille de l'intervalle (5) pour obtenir le 20)

28
Luli

En R, la fonction équivalente est seq et vous pouvez l’utiliser avec l’option by:

seq(from = 5, to = 100, by = 5)
# [1]   5  10  15  20  25  30  35  40  45  50  55  60  65  70  75  80  85  90  95 100

En plus de by, vous pouvez également avoir d'autres options telles que length.out et along.with.

length.out : Si vous voulez obtenir un total de 10 nombres compris entre 0 et 1, par exemple:

seq(0, 1, length.out = 10)
# gives 10 equally spaced numbers from 0 to 1

along.with : Il prend la longueur du vecteur que vous fournissez en entrée et fournit un vecteur de 1: longueur (entrée).

seq(along.with=c(10,20,30))
# [1] 1 2 3

Bien que, au lieu d'utiliser l'option along.with, il est recommandé d'utiliser seq_along dans ce cas. De la documentation pour ?seq

seq est générique et seule la méthode par défaut est décrite ici. Notez qu'il envoie sur la classe de l'argument first indépendamment des noms d'argument. Cela peut avoir des conséquences inattendues s'il est appelé avec un seul argument dans le but de le prendre comme étant le long.with: il est préférable d'utiliser seq_along dans ce cas.

seq_along: Au lieu de seq(along.with(.))

seq_along(c(10,20,30))
# [1] 1 2 3

J'espère que cela t'aides.

62
Arun

Utilisez le code

x = seq(0,100,5) #this means (starting number, ending number, interval)

la sortie sera 

[1]   0   5  10  15  20  25  30  35  40  45  50  55  60  65  70  75
[17]  80  85  90  95 100
1
sumit

Habituellement, nous souhaitons diviser notre vecteur en plusieurs intervalles. Dans ce cas, vous pouvez utiliser une fonction où (a) est un vecteur et (B) est le nombre d’intervalles. (Supposons que vous vouliez 4 intervalles)

a <- 1:10
b <- 4

FunctionIntervalM <- function(a,b) {
  seq(from=min(a), to = max(a), by = (max(a)-min(a))/b)
}

FunctionIntervalM(a,b)
# 1.00  3.25  5.50  7.75 10.00

Donc vous avez 4 intervalles:

1.00 - 3.25 
3.25 - 5.50
5.50 - 7.75
7.75 - 10.00

Vous pouvez également utiliser une fonction de coupe 

  cut(a, 4)

# (0.991,3.25] (0.991,3.25] (0.991,3.25] (3.25,5.5]   (3.25,5.5]   (5.5,7.75]  
# (5.5,7.75]   (7.75,10]    (7.75,10]    (7.75,10]   
#Levels: (0.991,3.25] (3.25,5.5] (5.5,7.75] (7.75,10]
0
Anya Sti