Question

I am reading a .csv into R with several different variable types two of which are read in as characters although they are numeric (latitude and longitude in decimal degrees). To work around this, I define them "as.numeric" after reading them in. Is there a more elegant way of doing this? Maybe within the call to "read.csv"?

d <- read.csv("data.csv",stringsAsFactors=F)
> str(d)
'data.frame':   467674 obs. of  7 variables:
 $ station     : chr  "USC00036506" "USC00036506" "USC00036506" "USC00036506" ...
 $ station_name: chr  "SEARCY AR US" "SEARCY AR US" "SEARCY AR US" "SEARCY AR US" ...
 $ lat         : chr  "35.25" "35.25" "35.25" "35.25" ...
 $ lon         : chr  "-91.75" "-91.75" "-91.75" "-91.75" ...
 $ tmax        : int  50 50 39 100 72 61 -17 -44 6 0 ...
 $ tmin        : int  -39 -39 -89 -61 -6 -83 -144 -150 -161 -128 ...
 $ tobs        : int  33 22 17 61 61 -78 -50 -94 -22 -11 ...

d$lat <- as.numeric(d$lat)
d$lon <- as.numeric(d$lon)

> str(d)
'data.frame':   467674 obs. of  7 variables:
 $ station     : chr  "USC00036506" "USC00036506" "USC00036506" "USC00036506" ...
 $ station_name: chr  "SEARCY AR US" "SEARCY AR US" "SEARCY AR US" "SEARCY AR US" ...
 $ lat         : num  35.2 35.2 35.2 35.2 35.2 ...
 $ lon         : num  -91.8 -91.8 -91.8 -91.8 -91.8 ...
 $ tmax        : int  50 50 39 100 72 61 -17 -44 6 0 ...
 $ tmin        : int  -39 -39 -89 -61 -6 -83 -144 -150 -161 -128 ...
 $ tobs        : int  33 22 17 61 61 -78 -50 -94 -22 -11 ...
Was it helpful?

Solution 2

I've finally found what was wrong. The "NA's" were encoded as "unknown" in the original file (before reading into R). I now realize I was being quite dense. Thank you all for your patience and help. This is the code I ended up using:

d <- read.csv("data.csv",stringsAsFactors=F, na.strings="unknown")

OTHER TIPS

You can set the column classes. Try this:

cls <- c(lat="numeric", lon="numeric")
read.csv("data.csv", colClasses=cls, stringsAsFactors=FALSE)

note: untested, since you don't provide test data.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top