J'ai trouvé quelques options d'autres postes, mais j'ai du mal à reproduire le code pour mes besoins spécifiques.
J'ai des données climatiques que je souhaiterais trouver la moyenne basée sur la saison à partir de 1910-2015 pour des emplacements spécifiques. P>
Voici un exemple de ce dont j'ai besoin: le PPT moyen pour Centroid_ID C1763_1 en 1911 pour l'hiver (mois 12 de l'année précédente [1910], mois 1 et 2 de l'année en question [1911]), Printemps (mois 3,4,5 en 1911), été (mois 6,7,8 en 1911) et automne (mois 9,10,11 en 1911). Cela aurait alors besoin d'être fait pour tous les identifiants de centroïde individuels pour chaque année. J'ai plus de 400 Centroid_ids uniques des années 1910-2015. P>
J'envisage le nouveau Dataframe à avoir les colonnes Centroid_id, Année, Wint_PPt, SPR_PPT, SUM_PPT, FALL_PPT. P>
CENTROID_ID YEAR MONTH PPT 1 c1763_1 1910 1 52.639 2 c1763_1 1910 2 20.870 3 c1763_1 1910 3 21.706 4 c1763_1 1910 4 9.347 5 c1763_1 1910 5 1.201 6 c1763_1 1910 6 11.267 7 c1763_1 1910 7 41.870 8 c1763_1 1910 8 61.260 9 c1763_1 1910 9 27.815 10 c1763_1 1910 10 67.377 11 c1763_1 1910 11 24.719 12 c1763_1 1910 12 30.212 13 c1763_1 1911 1 88.728 14 c1763_1 1911 2 50.035 15 c1763_1 1911 3 37.720 16 c1763_1 1911 4 12.831 17 c1763_1 1911 5 0.739 18 c1763_1 1911 6 18.198 19 c1763_1 1911 7 74.731 20 c1763_1 1911 8 40.873 21 c1763_1 1911 9 86.340 22 c1763_1 1911 10 36.423 23 c1763_1 1911 11 12.491 24 c1763_1 1911 12 19.428 25 c1763_1 1912 1 11.010 26 c1763_1 1912 2 16.339 27 c1763_1 1912 3 72.017 28 c1763_1 1912 4 25.887 29 c1763_1 1912 5 5.314 30 c1763_1 1912 6 8.595 31 c1763_1 1912 7 47.781 32 c1763_1 1912 8 51.188 33 c1763_1 1912 9 10.931 34 c1763_1 1912 10 119.725 35 c1763_1 1912 11 10.420 36 c1763_1 1912 12 8.777 37 c1763_1 1913 1 27.771 38 c1763_1 1913 2 62.622 39 c1763_1 1913 3 17.533 40 c1763_1 1913 4 8.008 41 c1763_1 1913 5 1.423 42 c1763_1 1913 6 3.773 43 c1763_1 1913 7 42.982 44 c1763_1 1913 8 40.541 45 c1763_1 1913 9 58.495 46 c1763_1 1913 10 22.729 47 c1763_1 1913 11 48.130 48 c1763_1 1913 12 32.049 49 c1763_1 1914 1 104.197 50 c1763_1 1914 2 31.707
3 Réponses :
est-ce?
> data # A tibble: 81 x 6 # Groups: CENTROID_ID, YEAR_LEAD [21] CENTROID_ID YEAR_LEAD SEASON PPT_AVG PPT_MIN PPT_MAX <chr> <int> <fct> <dbl> <dbl> <dbl> 1 c1763_1 1910 WINTER 83.5 81.4 85.7 2 c1763_1 1910 SPRING 72.3 52.7 96.0 3 c1763_1 1910 SUMMER 49.9 10.9 90.0 4 c1763_1 1910 AUTUMN 26.4 7.17 63.1 5 c1763_1 1911 WINTER 60.9 19.0 92.6 6 c1763_1 1911 SPRING 62.9 58.6 67.4 7 c1763_1 1911 SUMMER 49.2 23.7 76.4 8 c1763_1 1911 AUTUMN 43.9 15.1 84.4 9 c1763_1 1912 WINTER 38.5 18.4 67.9 10 c1763_1 1912 SPRING 72.1 53.4 93.9 # ... with 71 more rows
Aussi une bonne aide. Merci. Cela ne traite pas de la nécessité de la décision de l'année précédente d'être utilisée en hiver pour l'année en cours (décembre 1910 utilisé pour la moyenne de l'hiver 1911).
Mis à jour le code pour assurer que l'hiver comprend décembre de l'année précédente
Assignez simplement à une colonne code> code>, puis Si vous avez besoin de plusieurs agrégations de agrégate code>:
PPT code> : p>
Je pense que cela fonctionnerait aussi bien. Cependant, j'ai besoin de décembre (mois 12) de 1910 pour être utilisé en moyenne de PPT d'hiver pour 1911
Il suffit de régler année i> avec un autre ifelse code> expression:
df $ année <- avec (df, ifelse (mois == 12, année + 1, année)) code>. Voir Modifier les nouvelles affectations de colonne dans
dans code>.
C'est bien. Merci! J'ai aussi ajouté dans ma version finale une autre colonne pour (ppt ~ centroid_id + année + saison
Génial d'entendre et content d'aider! Oui, vous pouvez étendre la formule et même des agrégats: somme code>,
médiane code>,
longueur code> (pour le compte), etc. Codage heureux!
Vous pouvez créer une colonne auxiliaire em> de x $ x + x mois / 12 $ code> qui aide à amener en décembre pour l'année dernière à l'année en cours. Et ensuite utiliser simplement
agrégat code> de
ppt code> sur
centroid_id code>,
plancher (AUX) code> et
étage (Aux% % 1 * 4) code>. Puis
remodelez code> pour apporter les saisons de la même ligne.
x$aux <- x$YEAR + x$MONTH/12
y <- aggregate(PPT ~ CENTROID_ID + cbind(YEAR=floor(aux)) + cbind(SEASON=c("WINT",
"SPR", "SUM", "FALL")[1+floor(aux %% 1 * 4)]), x, mean)
reshape(do.call(data.frame, y), v.names = "PPT", timevar = "SEASON", idvar =
c("CENTROID_ID", "YEAR"), direction = "wide")
# CENTROID_ID YEAR PPT.FALL PPT.SPR PPT.SUM PPT.WINT
#1 c1763_1 1910 39.97033 10.75133 38.13233 36.75450
#2 c1763_1 1911 45.08467 17.09667 44.60067 56.32500
#3 c1763_1 1912 47.02533 34.40600 35.85467 15.59233
#4 c1763_1 1913 43.11800 8.98800 29.09867 33.05667
#17 c1763_1 1914 NA NA NA 55.98433
Cela a fonctionné super! Les autres réponses étaient bonnes aussi mais les vôtres ont répondu à la DC pour la dernière année à l'année en cours. MERCI!
Le titre de votre message pose des questions sur Max et Min, mais votre déclaration de problème ne les mentionne pas.
Désolé, j'ai oublié de modifier. J'ai réalisé que peut-être que c'était trop pour une question et de commencer avec les moyens d'abord, essayez d'abord de comprendre un max et un min même si je pouvais avec l'aide de cette question.