2015-03-20 1 views
1

Je veux savoir comment générer une séquence automatisée de 0 à 100, avec des nombres chacun 5 positions, tout le reste devrait être des valeurs NA. A la fin, je voudrais avoir quelque chose comme ceci:Comment générer une séquence incluant des valeurs NA dans R?

> labCol 
[1] 0 NA NA NA NA 5 NA NA NA NA 10 NA NA NA NA 15 NA ..... 100 

Je l'ai fait par exemple manuellement comme celui-ci, mais il est temps:

labCol <- c(0, NA, NA, NA, NA, 5, NA, NA, NA, NA, 10, NA, NA, NA, NA, 15, NA, ... 100) 

Je ne peux pas trouver une option dans le seq() fonction pour ce faire.

Ce problème est dû au fait que je fais une carte thermique avec la fonction heatmap.2() du package gplots, et que les étiquettes de colonnes sont trop proches pour être lues. Je ne peux pas non plus définir les étiquettes toutes les 5 ou 10 positions. C'est pourquoi j'ai besoin de générer ma propre séquence d'étiquettes avec des valeurs NA pour éviter ce chevauchement.

Toute suggestion est la bienvenue :)

Répondre

5

Essayez ceci:

labCol <- seq(0, 100, 1) 
labCol[labCol %% 5 != 0] <- NA 

Cela génère une séquence de 0 à 100 par 1, puis règle que toutes les valeurs de séquence non divisible par 5-NA.

+0

merci A. @ Alex cela fonctionne !! pardonne mon ignorance, mais que signifie '%%' et '! = 0'? –

+4

Arithmétique modulo. –

+1

@DarwinPC: Comme BondedDust mentionné, '%%' obtient le [module] (http://en.wikipedia.org/wiki/Modulo_operation), c'est-à-dire le reste après la division entière. Pour tout nombre non divisible par 5, le reste sera non nul, donc nous pouvons définir ces cas à 'NA'. '! = 0' signifie non égal à 0. –

1

Vous pouvez aussi créer un vecteur NA puis remplissez les éléments

labCol <- rep(NA,100) 
labCol[seq(1,101, 5)] <- seq(0,100,5) 
labCol 
#[1] 0 NA NA NA NA 5 NA NA NA NA 10 NA NA NA NA 15 NA NA 
#[19] NA NA 20 NA NA NA NA 25 NA NA NA NA 30 NA NA NA NA 35 
#[37] NA NA NA NA 40 NA NA NA NA 45 NA NA NA NA 50 NA NA NA 
#[55] NA 55 NA NA NA NA 60 NA NA NA NA 65 NA NA NA NA 70 NA 
#[73] NA NA NA 75 NA NA NA NA 80 NA NA NA NA 85 NA NA NA NA 
#[91] 90 NA NA NA NA 95 NA NA NA NA 100