Skip to content
Prev 4257 / 15075 Next

dates in French format

(I've put the R Mac list in cc because of the crashes I have  
experienced trying some of the suggestions below)

Hi Gabor and Prof Ripley,

Le 31 janv. 08 ? 02:11, Prof Brian Ripley a ?crit :
You are right, sorry about that:


 > library(chron)
 > sessionInfo()
R version 2.6.1 (2007-11-26)
i386-apple-darwin8.10.1

locale:
fr_FR.UTF-8/fr_FR.UTF-8/fr_FR.UTF-8/C/fr_FR.UTF-8/fr_FR.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] chron_2.3-16
I was ready to blame Excel for the use of non-standard abbreviations,  
but I would have been wrong: it seems that "janv" is a Mac OS X  
decision from what I can see in my system settings. I am not sure what  
would be a bullet-proof authority on french abbreviations. My  
dictionary was of no help, but wikipedia seems to endorse Mac OS X and  
Windows use of "janv":

<http://fr.wikipedia.org/wiki/Mois#Abr.C3.A9viations>
I tried this too:
 > format(Sys.Date(), "%d-%b-%y")
[1] "31-jan-08"
 > format(Sys.Date()-50, "%d-%b-%y")
[1] "12-d?c-07"

I am lost here: since the OS uses "janv", why did the above give  
"jan"???
Thank you Prof Ripley, although I'll have to do my homework to fully  
understand what is happening with the function you wrote.

But I wonder why I cannot make this a Date object:

 > x <- "9-janv-08"
 > x2 <- strsplit(x, "-")
 > x3 <- sapply(x2, function(x) {x[2] <- tr[x[2]]; paste(x,  
collapse="-")})
 > as.Date(x3, format = "%d-%b-%y")
[1] "2008-01-09"
 > class(x3)
[1] "character"
 > x4 <- as.Date(x3, format = "%d-%b-%y")

  *** caught bus error ***
address 0x8, cause 'non-existent physical address'

Traceback:
  1: strptime(x, format)
  2: as.Date.character(x3, format = "%d-%b-%y")
  3: as.Date(x3, format = "%d-%b-%y")

Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace

The problem may be my system as I get this error when trying Gabor's  
suggestions (below).

Le 31 janv. 08 ? 00:21, Gabor Grothendieck a ?crit :
> library(chron)
 > dd <- c("7-d?c-07", "11-d?c-07", "14-d?c-07", "18-d?c-07", "21- 
d?c-07",
+ "24-d?c-07", "26-d?c-07", "28-d?c-07", "31-d?c-07", "2-janv-08",
+ "4-janv-08", "7-janv-08", "9-janv-08", "11-janv-08", "14-janv-08",
+ "16-janv-08", "18-janv-08")
 > Sys.setlocale("LC_ALL", "French")
[1] ""
Warning message:
In Sys.setlocale("LC_ALL", "French") :
   la requ?te OS pour sp?cifier la localisation ? "French" n'a pas pu  
?tre honor?e
 > chron(unclass(as.Date(dd, "%d-%b-%y")))

  *** caught bus error ***
address 0x8, cause 'non-existent physical address'

Traceback:
  1: strptime(x, format)
  2: as.Date.character(dd, "%d-%b-%y")
  3: as.Date(dd, "%d-%b-%y")
  4: inherits(dates., "dates")
  5: chron(unclass(as.Date(dd, "%d-%b-%y")))

Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace
Again, this Sys.setlocale call does not work for me and the use of  
as.Date crashes my copy of R:

 > library(chron)
 > library(gsubfn)
Le chargement a n?cessit? le package : proto
 > french.months <- format(seq(as.Date("2000-01-01"), length = 12, by  
= "month"), "%b")

  *** caught bus error ***
address 0x8, cause 'non-existent physical address'

Traceback:
  1: strptime(x, f)
  2: fromchar(x)
  3: as.Date.character("2000-01-01")
  4: as.Date("2000-01-01")
  5: seq(as.Date("2000-01-01"), length = 12, by = "month")
  6: format(seq(as.Date("2000-01-01"), length = 12, by = "month"),      
"%b")

Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace

However, if I replace that call by this, the rest of Gabor's solution  
works.

 > library(chron)
 > library(gsubfn)
Le chargement a n?cessit? le package : proto
 > french.months <- c("janv", "f?v", "mars", "avr", "mai", "juin",  
"juil", "ao?t", "sept", "oct", "nov", "d?c")
 > dd <- c("7-d?c-07", "11-d?c-07", "14-d?c-07", "18-d?c-07", "21- 
d?c-07",
+ "24-d?c-07", "26-d?c-07", "28-d?c-07", "31-d?c-07", "2-janv-08",
+ "4-janv-08", "7-janv-08", "9-janv-08", "11-janv-08", "14-janv-08",
+ "16-janv-08", "18-janv-08")
 > f <- function (d, m, y) chron(paste(pmatch(m, french.months), d, y,  
sep = "/"))
 > strapply(dd, "(.*)-(.*)-(.*)", f, backref = -3, simplify = c)
  [1] 12/07/07 12/11/07 12/14/07 12/18/07 12/21/07 12/24/07 12/26/07  
12/28/07
  [9] 12/31/07 01/02/08 01/04/08 01/07/08 01/09/08 01/11/08 01/14/08  
01/16/08
[17] 01/18/08

So thanks again. I will try to reinstall R on my computer and see if I  
still get these errors.


Denis