Bonjour,
travaillant sur R, j'ai eu besoin de transformer une df initiale en une df finale, via le code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
changement<-function(df)
{
#nombres d'individus
n <- dim(df)[1]
#mise en place dataframe des observations
OBS<-NULL
#split entre valeurs quali//quanti
data1<-df[,c(1,2)]
data2<-df[,c(3,4,5,6)]
#on ordonne chaque ligne par sa date d'occurence
data3<-t(apply(as.matrix(data2), 1, order))
#extraction pour un seul individu
for (i in 1:n)
{
#travail sur les valeurs num observées 
data4<-as.matrix(data2[i,data3[i,]])
rownames(data4)<-NULL
colnames(data4)<-NULL
#création d'une matrice d'indices
matrice<-matrix(rep(0,16),byrow=T,ncol=4)
for (j in 1:4)
{
  if(data4[j]!=999)
    {
  matrice[j,data3[i,j]]<-1
  }else{matrice<-matrice[-j,]
        data4<- data4[-j]}
print(matrice)
}
#scalaire en cas de changement de dim de "matrice"
l<- dim(matrice)[1]
#suppression des événements qui ne se sont pas produits
#rajout d'un vecteur censure fictif afin d'avoir un agencement de valeurs correspondant à celui employé par la suite
C<-rep(0,l)
print(C)
#rajout d'un vecteur individu
Ind<-rep(i,l)
print(Ind)
#rajout d'un vecteur sexe
S<- rep(data1[i,1],l)
print(S)
#rajout d'un vecteur génération
G<- rep(data1[i,2],l)
print(G)
#matrice d'individus finale
#IND<-cbind(t(sx),t(gen),t(ind),t(data4),matrice,t(censure))
print(matrice)
print(t(data4))
IND<-cbind(Ind,S,G,t(data4),matrice,C)
OBS<-rbind(OBS,IND)
}
df<-as.data.frame(OBS)
print(df)
 
}
Il s'avère que lorsque j'arrive sur une valeur 999, je ne peux plus effectuer de cbind. J'ai fait afficher les différents vecteurs et matrices que j'utilise lors de la concaténation et ceux-là semblent pourtant de bonne dimension.
Pour faire simple et trouver le problème j'ai la ligne de données suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
test
   SEXEGO gene indp emp.tp mar enf1
12      2    1   25     16  25  999
J'espère avoir été assez précis, merci d'avance pour votre aide.

Finalement, j'ai cindé en deux mon code ci-dessus. Une premiere partie desormais qui me crée une data frame et enfin, une seconde qui me retire toutes les lignes ayant pour valeur 999 via:
Si quelqu'un prend le temps de savoir d'où venait mon soucis, je serais curieux d'en savoir plus.
Quoiqu'il en soit merci pour tout, et désolé de la gène occasionée.
J.