You need lapply here:

df[2:3] <- lapply(df[2:3], as.Date, '%m/%d/%Y')





On Tue, Jun 8, 2010 at 6:19 PM, Horace Tso <horace....@pgn.com> wrote:

> Folks, i thought it should be straightforward but after a few hours poking
> around, I decided it's best to post my question on this list.
>
> I have a data frame consisting of a (large) number of date columns, which
> are read in from a csv file as character string. I want to convert them to
> Date type. Following is an example, where the first column is of integer
> type, while the rest are type character.
>
> > head(df)
>  TRANSNO TRANS.START_DATE TRANS.END_DATE DIVISION FASB
> 1  250897         7/1/2010      7/31/2010  PSTRUCT    Z
> 2  250617         8/1/2010      8/31/2010  PSTRUCT    Z
> 3  250364         4/1/2011      6/30/2011      PLR    Z
> 4  250176         4/1/2011      6/30/2011      PLR    Z
> 5  250176         4/1/2011      6/30/2011      PLR    Z
> 6  250364         4/1/2011      6/30/2011      PLR    Z
> > sapply(df, class)
>         TRANSNO TRANS.START_DATE   TRANS.END_DATE         DIVISION
>     FASB
>       "integer"      "character"      "character"      "character"
>  "character"
> I thought it's just a matter of applying with a as.Date,
>
> df[,c(2,3)] = apply(df[,c(2,3)], 2, function(x)as.Date(x,"%m/%d/%Y"))
>
> Well, the Date conversion fails and I got,
>
>  TRANSNO TRANS.START_DATE TRANS.END_DATE DIVISION FASB
> 1  250897            14791          14821  PSTRUCT    Z
> 2  250617            14822          14852  PSTRUCT    Z
> 3  250364            15065          15155      PLR    Z
> 4  250176            15065          15155      PLR    Z
> 5  250176            15065          15155      PLR    Z
> 6  250364            15065          15155      PLR    Z
> The character columns are indeed converted, but they became integer, not
> Date type. OK, that's strange and so I started reading the help pages.
>
> It turns out in apply, the result is coerced to some basic vector types.
>  And apparently Date is not one of the basic vector types.
>
> "In all cases the result is coerced by as.vector<
> http://127.0.0.1:19182/library/base/help/as.vector> to one of the basic
> vector types before the dimensions are set, so that (for example) factor
> results will be coerced to a character array. "
>
> The question then is how type conversion can be carried out on some columns
> of a data frame without using a loop.
>
> Thanks.
>
> Horace Tso
>
>
>
>
>
>
>
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



-- 
Henrique Dallazuanna
Curitiba-Paraná-Brasil
25° 25' 40" S 49° 16' 22" O

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to