ProblèmeInterpolate avec spline et garder exactement les valeurs nouée
Je joue autour de cannelures et d'essayer de se connecter à mi mois interpoler toute l'année à partir 15 Janvier avec; Cependant, je veux m'assurer que les mois intermédiaires sont correctement définis pour toute l'année. C'est-à-dire, chaque mois, je veux que le point médian (15ème) soit le même à partir des données mensuelles d'origine. Actuellement, le code que j'ai ne le fait pas et certaines des valeurs sont assez différentes du code original. Je voudrais m'assurer, si possible, que ces valeurs exactes correspondent aux données au milieu (15e) de chaque mois.
Y a-t-il un moyen de s'assurer que ces points des données d'origine sont correctement définis dans les données interpolées afin qu'ils soient à la position exacte du point médian (15ème) de chaque mois?
Exemple:
# Monthly data
df <- data.frame(x <- seq(1,12),
y <- c(45, 54, 50 ,63, 70, 75, 80, 88, 76, 81, 63, 54))
# Interpolate with spline to daily data starting with 15th of January (351 days)
values <- spline(df$x, df$y, n = 351)$y
# Check values
# Original values
df$y
# New values at 15th of each month
values[c(1,31, 60,91,121,152,182,213,244,274,305,335)]
sortie (Une bonne ronde, mais la plupart sont éteints):
> df$y
[1] 45 54 50 63 70 75 80 88 76 81 63 54
> values[c(1,31, 60,91,121,152,182,213,244,274,305,335)]
[1] 45.00000 54.21321 49.65891 60.61385 68.91151 73.89644 77.62606 87.33305 79.66860 79.27115 73.10543 54.71480
sortie souhaitée:
> df$y
[1] 45 54 50 63 70 75 80 88 76 81 63 54
> values[c(1,31, 60,91,121,152,182,213,244,274,305,335)]
[1] 45 54 50 63 70 75 80 88 76 81 63 54
Image:
rouge: points de mois originaux
Ligne noire: Points d'interpolation spline
Si je comprends bien votre question, vous pourriez constater que 'df' peut contenir un ensemble de dates (stockées sous forme de R' Date' objets) et les valeurs pour les jours à être utilisé comme base pour interpolation y compris pour plusieurs années. Vous pouvez ensuite générer un vecteur de valeurs pour tous les jours dans l'intervalle comme indiqué dans le code ou vous pouvez utiliser la fonction 'values_by_date' directement pour obtenir des valeurs pour n'importe quel ensemble de dates. – WaltS
Désolé, j'ai mal compris comment vous présentez la réponse. Cela fonctionne parfait! Merci – Vedda