2017-10-16 45 views
-1

J'ai un problème assez simple, mais pour une raison quelconque, je ne peux pas m'en tenir à la solution. Je suis en train de le faire en R, mais vraiment, cela est plus une question mathématique/gymnastique de l'esprit ..en ordonnant 4 événements par an en chiffres absolus

J'ai données qui sont organisées de cette manière: - remarquez l'événement Année 3 3 disparus

Year event  
    1  1  
    1  2  
    1  3  
    1  4  
    2  1  
    2  2  
    2  3  
    2  4 
    3  1  
    3  2  
    3  4 
    3  4  

Et j'essaye d'obtenir une colonne dans laquelle j'ai un nombre unique qui ira de 1 à 12 (appelons cela occasion pour chaque occasion que vous avez eue depuis t1 pour capturer un animal). le résultat devrait ressembler à ceci:

Year Event  Occasion 
    1  1    1 
    1  2    2 
    1  3    3 
    1  4    4 
    2  1    5 
    2  2    6 
    2  3    7 
    2  4    8 
    3  1    9 
    3  2   10 
    3  4   12 
    3  4   12 

Je dois aussi faire en sorte que s'il y a une ligne manquante (par exemple, pas d'année 3 cas 3 dans mon exemple ci-dessus), je vais sauter l'événement (valeurs absolues) pour cette 'occasion' et toujours 12 pour l'événement 4 de l'année 3. Je ne peux évidemment pas simplement les aligner et compter le nombre de lignes puisque j'ai plusieurs lignes qui devront être associées à la même occasion (par exemple 2 lignes avec year3/event4/occasion12)

Merci pour l'aide!

+0

S'il vous plaît d'abord essayer de résoudre le problème vous-même. Si vous avez une question spécifique sur la raison pour laquelle votre solution (code!) Ne fonctionne pas comme prévu, demandez ici. –

Répondre

0

vous pouvez utiliser une formule simple, comme ci-dessous:

library(tidyverse) 
df <- tribble(
    ~year, ~event,  
    1,  1,  
    1,  2,  
    1,  3,  
    1,  4, 
    2,  1, 
    2,  2, 
    2,  3, 
    2,  4, 
    3,  1,  
    3,  2,  
    3,  4, 
    3,  4  
) 
df %>% 
    mutate(occasion = ((year - 1) * 4) + event) 

Sortie:

year event occasion 
    <dbl> <dbl> <dbl> 
1  1  1  1 
2  1  2  2 
3  1  3  3 
4  1  4  4 
5  2  1  5 
6  2  2  6 
7  2  3  7 
8  2  4  8 
9  3  1  9 
10  3  2  10 
11  3  4  12 
12  3  4  12 
+0

Oui! Je pense que ça pourrait marcher. Je jouais avec le * 4, mais pour une raison quelconque n'a pas réussi à le descendre! Merci beaucoup! Je vous ferai savoir comment cela fonctionne –