1 pièce(s) jointe(s)
Tableau croisé à partir de valeurs
Bonjour,
Je souhaite faire un tableau croisé me calculant le total de surfaces d'un état A vers un état B. Mon fichier .dbf en entrée (issu d'un shapefile), contient 3 champs : l'état initial, l'état final et la surface. Mes individus sont des polygones (étant donné que ça vient d'un SIG).
Exemple :
Etat initial |
Etat final |
Surface |
Etat A |
Etat A |
30 |
Etat B |
Etat A |
10 |
Etat A |
Etat A |
20 |
Etat B |
Etat A |
20 |
Etat B |
Etat B |
40 |
Je souhaite obtenir le tableau suivant :
initial \ final |
Etat A |
Etat B |
Etat A |
50 |
0 |
Etat B |
30 |
40 |
Le but au final est de faire un graphe de transition d'un état à l'autre, comme on peut le voir sur ce document page 8. Pièce jointe 221349
Je précise que je n'ai pas nécessairement le même nombre d'états initiaux et finaux, et donc par conséquent certains états initiaux ne se retrouvent pas en finaux et inversement.
J'espère avoir été assez clair dans l'expression de mon besoin. Merci de votre aide !
Tableau croisé à partir de valeurs
Bonjour,
Une proposition de code avec la librairie reshape et la fonction cast(). C'est l'équivalent d'un tableau croisé dynamique :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| > toto <- data.frame(initial=c("A","B","A","B","B"),
+ final=c("A","A","A","A","B"),
+ value=c(30,10,20,20,40))
> toto
initial final value
1 A A 30
2 B A 10
3 A A 20
4 B A 20
5 B B 40
> library(reshape)
> cast(toto,initial~final,sum)
initial A B
1 A 50 0
2 B 30 40 |
Cordialement,
Tableau croisé à partir de valeurs
Bonjour,
Code:
1 2 3 4 5 6 7 8 9 10 11
| > toto <- data.frame(initial=c("A","B","A","B","B"),
+ final=c("A","A","A","A","B"),
+ surface=c(30,10,20,20,40),
+ annee=c(1980,1990,1994,1982,1990))
> toto
initial final surface annee
1 A A 30 1980
2 B A 10 1990
3 A A 20 1994
4 B A 20 1982
5 B B 40 1990 |
Code:
1 2 3 4 5
| > library(reshape)
> cast(toto,initial~final,value="surface",sum)
initial A B
1 A 50 0
2 B 30 40 |
Cordialement,