2016-08-23 1 views
0

Le vecteur suivant contient des nombres de mois.Transformation d'un vecteur de numéros de mois

x <- c(10,4,10,12,1,3,6,7,9,11,12,4,7,8) 

Plus précisément, le premier élément est le 10e mois de quelque année, le second est le 4ème mois de l'année suivante, etc. Je cherche un moyen d'ajouter 12 dans les éléments de x, nécessaire, de sorte que je reçois un vecteur y comme ceci:

y <- c(10,16,22,24,25,27,30,31,33,35,36,40,43,44) 

Comment suggéreriez-vous de le faire?

Répondre

2

Nous pouvons comparer les éléments adjacents avec diff, vérifiez si elle est inférieure à 0 pour créer un vecteur logique, concaténer avec FALSE pour tenir compte de la différence de longueur en sortie de diff, obtenir le cumsum, il faut multiplier par 12 et ajouter x

x+ cumsum(c(FALSE, diff(x)< 0)) *12 
#[1] 10 16 22 24 25 27 30 31 33 35 36 40 43 44 
2

sur la base de l'exemple que vous avez fourni, j'itérer la liste des éléments et chaque fois que je vois un élément qui est plus petit que le précédent, ajouter n * 12 aux suivantes. Où n = 0 initialement et incrémenté chaque fois que vous détectez un plus petit nombre que le précédent dans la liste.

Ma question est, cependant, comment vous gérez quand vous avez besoin du 2ème mois d'une certaine année et rien de plus de celui-là, mais le 7ème mois par exemple de l'année suivante? Vous aurez certainement besoin de quelque chose pour différencier ce cas du cas où vous avez le 2ème mois et le 7ème mois de la même année. La simple liste de chiffres ne suffit pas pour cela, j'en ai peur.

+0

Vous avez raison. Un deuxième vecteur d'années est nécessaire. Il y a où la comparaison des éléments adjacents doit être faite. – Brani

+0

Ceci ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son article. - [À revoir] (/ review/low-quality-posts/13429777) – user2100721

+0

@ user2100721: Je ne suis pas d'accord. J'ai essayé d'expliquer comment je résoudrais un problème dans mon premier paragraphe. Ce n'était pas dans le code, mais encore, je pense une explication de ma solution. Dans le deuxième paragraphe, j'ai mentionné une faille de ce concept et un problème, que je pensais empêcher toute solution correcte si nous avons seulement les données fournies comme entrée. À mon avis, c'est aussi une information utile pour enfin arriver à une solution vraiment efficace pour quelqu'un. –