Formats de date

Questions sur les objets de R et la manipulation des données

Modérateur : Groupe des modérateurs

LA haumont
Messages : 41
Enregistré le : 16 Mai 2006, 09:33

Formats de date

Messagepar LA haumont » 19 Juin 2006, 09:07

Est ce que vous savez ce que cette erreur signifie exactement et comment on peut y remédier?

Code : Tout sélectionner

Erreur dans fromchar(x) : la chaîne de caractères n'est pas dans un format standard non ambigu

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 19 Juin 2006, 11:36

Il faudrait nous dire comment est apparue cette erreur. La fonction traceback(), appelée immédiatement après l'erreur, peut être très utile pour comprendre d'où vient le pb.

Renaud

LA haumont
Messages : 41
Enregistré le : 16 Mai 2006, 09:33

Messagepar LA haumont » 19 Juin 2006, 11:53

Voici la commance qui a entrainé cette erreur:

Code : Tout sélectionner

NewTab$DateA <- as.Date(NewTab$DateAngio, order="dmy")

merci

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 19 Juin 2006, 11:57

Donc le message est clair: ta variable décrivant la date n'est pas dans un format sans ambiguité (exemple: 07/02/05). Il faut préciser le format avec l'argument... format. Etonnant, non ? Voir l'aide de as.Date...

LA haumont
Messages : 41
Enregistré le : 16 Mai 2006, 09:33

Messagepar LA haumont » 19 Juin 2006, 12:21

même avec l'argument format ca ne marche pas...j'obtiens des NA dans toute la colonne. et l'aide de as.Date j'pense que je le connais plutot bien maintenant!

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 19 Juin 2006, 13:35

Je ne connais pas l'argument "order" pour as.Date, et order n'est pas une fonction générique ==> je me demande ce que signifie order = "dmy".

Code : Tout sélectionner

> test <- data.frame( MaDate = c("12-25-03", "12-25-04"))
> test
    MaDate
1 12-25-03
2 12-25-04
> as.Date(test$MaDate, order = "dmy")
Erreur dans fromchar(x) : la chaîne de caractères n'est pas dans un format standard non ambigu
> as.Date(test$MaDate, format = "%d-%m-%Y")
[1] NA NA
> as.Date(test$MaDate, format = "%m-%d-%y")
[1] "2003-12-25" "2004-12-25"


La fonction "methods" permet de trouver les méthodes disponibles pour as.Date:

Code : Tout sélectionner

> methods("as.Date")
[1] as.Date.character as.Date.date      as.Date.dates     as.Date.default   as.Date.factor    as.Date.POSIXct   as.Date.POSIXlt 


Apparemment, l'erreur proviendrait de la méthode pour les chaînes de caractères, ce qui est confirmé en examinant le code:

Code : Tout sélectionner

> as.Date.character
function (x, format = "", ...)
{
    fromchar <- function(x) {
        xx <- x[1]
        if (is.na(xx)) {
            j <- 1
            while (is.na(xx) && (j <- j + 1) <= length(x)) xx <- x[j]
            if (is.na(xx))
                f <- "%Y-%m-%d"
        }
        if (is.na(xx) || !is.na(strptime(xx, f <- "%Y-%m-%d")) ||
            !is.na(strptime(xx, f <- "%Y/%m/%d")))
            return(strptime(x, f))
        stop("character string is not in a standard unambiguous format")
    }
    res <- if (missing(format))
        fromchar(x)
    else strptime(x, format)
    .Internal(POSIXlt2Date(res))
}
<environment: namespace:base>



Il s'agit dont bien d'une erreur de format. Tu n'as sans doute pas assez bien lu l'aide de as.Date ;-)

Renaud

LA haumont
Messages : 41
Enregistré le : 16 Mai 2006, 09:33

Messagepar LA haumont » 19 Juin 2006, 14:39

et donc au final de quelle facon vous pensez que je puisse m'en sortir car la je galère vraiment et ne sais plus par quel moyen passé!

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 19 Juin 2006, 15:19

Trouver le bon format correspondant à vos dates. Pouvez-vous nous montrer les premiers éléments de NewTab$DateAngio ?

LA haumont
Messages : 41
Enregistré le : 16 Mai 2006, 09:33

Messagepar LA haumont » 20 Juin 2006, 09:30

Code : Tout sélectionner

NOM         NIP   DateAngio   N.Angio
   1          xx       22.09.1952   1
             2          yyy     8.04.1915     2
             3          zzz      1.01.1923     1


il faut savoir que pour certains patients la date d'angio est absente

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 20 Juin 2006, 09:38

Donc:

Code : Tout sélectionner

> test <- data.frame(DateAngio = c("22.09.1952", "8.04.1915", "1.01.1923", ""))
> test
   DateAngio
1 22.09.1952
2  8.04.1915
3  1.01.1923
4           
> as.Date(test$DateAngio, format = "%d.%m.%Y")
[1] "1952-09-22" "1915-04-08" "1923-01-01" NA         


Renaud

LA haumont
Messages : 41
Enregistré le : 16 Mai 2006, 09:33

Messagepar LA haumont » 20 Juin 2006, 12:12

merci beaucoup...en fait je crois que j'ai eu un soucy de version!

mais j'ai une autre erreur:

Code : Tout sélectionner

NewTriNom$ecart <- as.numeric(diff(NewTriNom$DateAngio))
Erreur dans "$<-.data.frame"(`*tmp*`, "ecart", value = c(1, 1605, 247, -1401,  :
        le tableau de remplacement a 3618 lignes, le tableau remplacé en a 3619

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 20 Juin 2006, 12:36

Fastoche. C'est en rapport avec la fonction diff. Je vous laisse chercher...

LA haumont
Messages : 41
Enregistré le : 16 Mai 2006, 09:33

Messagepar LA haumont » 20 Juin 2006, 13:51

je sais qu'il y a peut etre un truk avec lag et différences mais ne compren pas bien ce qu'il désigne!
j'ai de moins en moins de tps donc ce serait vraiment sympa si vous pouviez m'aidez

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 20 Juin 2006, 20:08

Si x est un vecteur de longueur n, diff(x) renvoie un vecteur de longueur n-1. Les colonnes de votre data.frame n'ont alors plus la même longueur ce qui entraîne le message d'erreur.

Renaud

LA haumont
Messages : 41
Enregistré le : 16 Mai 2006, 09:33

Messagepar LA haumont » 21 Juin 2006, 09:33

ca confirme se que j'avais compris ...merci beaucoup
je crois que j'ai tt essayer avec lag et différences..il y a une autre option ? vous voyez ce qu'il faudrait mettre exactement?


Retourner vers « Archives : Manipulation de données avec R »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité