[R] Help with read.csv

Giovanni Petris gpetris at uark.edu
Thu Mar 10 15:52:58 CET 2011


Thanks to everybody who answered with suggestions (David Wolfskill,
Stephen Sefick, Jim Holtman, Gabor Grothendieck, and Phil Spector). 

Beside the obvious end-of-the-day mixup ("int" in lieu of "integer"), I
was not aware of the existence of a "NULL" class - which proved pretty
useful in this case.

Thanks again for the help from this great list!

Best,
Giovanni

On Wed, 2011-03-09 at 15:10 -0800, David Wolfskill wrote:
> On Wed, Mar 09, 2011 at 04:32:29PM -0600, Giovanni Petris wrote:
> > 
> > Hello,
> > 
> > I have a file that looks like this:
> > 
> > Date,Hour,DA_DMD,DMD,DA_RTP,RTP,,
> > 1/1/2006,1,3393.9,3412,76.65,105.04,,
> > 1/1/2006,2,3173.3,3202,69.20,67.67,,
> > 1/1/2006,3,3040.0,3051,69.20,77.67,,
> > 1/1/2006,4,2998.2,2979,67.32,69.10,,
> > 1/1/2006,5,3005.8,2958,65.20,68.34,,
> > 
> > where the ',' is the separator and I tried to read it into R, but...
> > 
> > > y <- read.csv("Data/Data_tmp.csv", header = FALSE, skip = 1,
> > +               colClasses = c("character", "int", rep("double", 4)),
> > +               col.names = c("Date","Hour","DA_DMD","DMD","DA_RTP", "RTP"),
> > +               flush = TRUE)
> > Error in read.table(file = file, header = header, sep = sep, quote = quote,  : 
> >   more columns than column names
> > 
> > count.fields() gives me 8 fields per line, so I tried other variations,
> > like the following, with two fictitious extra fields, but...
> >...
> > Error in methods::as(data[[i]], colClasses[i]) : 
> >   no method or default for coercing "character" to "int"
> > 
> > Could anybody please tell me what I am doing wrong and how I could read
> > my data into R?
> 
> I copied the data locally, then I read it using:
> 
> > y <- read.csv("Data_tmp.csv", header = TRUE, colClasses = c("character", "integer", rep("double", 4), "NULL", "NULL"))
> 
> which yields:
> 
> > y
>       Date Hour DA_DMD  DMD DA_RTP    RTP
> 1 1/1/2006    1 3393.9 3412  76.65 105.04
> 2 1/1/2006    2 3173.3 3202  69.20  67.67
> 3 1/1/2006    3 3040.0 3051  69.20  77.67
> 4 1/1/2006    4 2998.2 2979  67.32  69.10
> 5 1/1/2006    5 3005.8 2958  65.20  68.34
> > 
> 
> Is that what you had in mind?
> 
> Issues I tried to address:
> * The class is "integer", not "int".
> * I used "NULL" class to refer to columns that are to be skipped.
> * I made use of the headers, rather than skipping them & re-coding their
>   content in the read.csv() invocation.
> 
> Peace,
> david



More information about the R-help mailing list