Bonjour,
Voilà bien longtemps que je ne suis pas venu sur les forums de Developpez ! J'ai mis de côté Access, Excel, VBA et autres ETL pour aller prendre l'R... mais aujourd'hui je recherche de l'aide sur ce magnifique outil.
L'objectif de mon travail est de produire de beaux graphiques en surface 3D ( avec rgl).
de ce genre là (fait avec un logiciel propriétaire)
Pièce jointe 225678
Mais avant ça je dois travailler sur mes données et notamment faire de l'interpolation. Et c'est là que ça coince !
La situation: j'ai réalisé des mesures en profondeur dans le sol sur 80 cm (une mesure tous les cm de 0 à 80 cm = 81 résultats) et sur 11 m de large (12 séries de mesures tous les mètres numérotées de 1 à 12).
En profondeur, la "maille" (1 cm) est très fine, par contre, en largeur je souhaite interpoler (no linéairement) les valeurs tous les 25 cm (au lieu d'1 m).
Au départ j'ai donc un fichier .csv qui se présente comme ça:
x y Mesure
1 0 1.2
1 1 1.3
1 2 1.1
.
.
.
2 0 1.5
2 1 2.7
.
.
.
12 80 4.9
Il y a 12 répétitions de 81 résultats (soit 972 mesures)
Après interpolation je voudrais quelque chose comme ça:
(en vert les "ajouts" dans la grille, en rouges les valeurs interpolées)
x y Mesure
1 0 1.2
1 1 1.3
1 2 1.1
.
1.25 0 1.25
.
2 0 1.5
2 1 2.7
.
3.75 5 5.6
.
12 80 4.9
Il y aurait 45 séries de 81 valeurs (soit 3645 valeurs)
Bon le contexte étant posé, je souhaite de l'aide pour utiliser "interp.new"
Voilà ce que j'ai fait pour l'instant:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 library(akima) #nécessaire pour l'interpolation #on charge le fichier de données # il faut bien sur adapter /chemin_vers_fichier Parcelle1_2015 <- read_delim("chemin_vers_fichierl/Parcelle1_2015.csv",";", escape_double = FALSE, col_types = cols(x = col_double(), y = col_double()), trim_ws = TRUE) # mes x vont de 1 à 12, je crée une séquence de nombres entre ces 2 valeurs par pas de 0,25 (tous les 25 cm) grilleX<-seq(1,12,0.25) grilleY<-seq(0,80,1) # je laisse l'intervale de 1cm pour les y grille_25cm<-expand.grid(x=grilleX,y=grilleY) # je crée une matrice avec toutes les combinaisons de x et y possibles. C'est sur ces points que je vais interpoler interp_indice<-interp.new(Parcelle1_2015$x,Parcelle1_2015$y,Parcelle1_2015$Mesure,xo = seq(min(Parcelle1_2015$x),max(Parcelle1_2015$x),length = 45),yo = seq(min(Parcelle1_2015$y),max(Parcelle1_2015$y),length = 81),linear = FALSE, ncp = NULL, extrap = FALSE, duplicate = "error",dupfun = NULL) #jusqu'ici R ne renvoi pas d'erreur interp_indice_df<-data.frame(x=interp_indice[[1]],y=interp_indice[[2]],Indice=interp_indice[[3]]) #Mais là ça plante #Error in data.frame(x = interp_indice[[1]], y = interp_indice[[2]], Indice = interp_indice[[3]]) : # les arguments impliquent des nombres de lignes différents : 45, 81
Pouvez-vous m'aider ?
Merci d'avance !