Martin Ralphs
2011-Mar-16 22:12 UTC
[R] Numeric vector converted mysteriously to characters in data frame?
Dear R Help, I would be very grateful if somebody could explain why this is happening. I am trying to plot a lattice barchart of a vector of numbers with age bandings that I have brought together into a data frame. When I plot the variables in their raw vector form, it works. When I try to plot them in the df, R labels the numeric axis with default factor values and treats the numeric vector as character. Why is this? Apologies if this is blindingly obvious, I am new to R. Here is some sample code that demonstrates the problem: library(lattice) # Load in some sample data ... ageband <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18) agenames <- c("00-04","05-09","10-14","15-19","20-24","25-29","30-34","35-39", "40-44","45-49","50-54","55-59","60-64","65-69","70-74","75-79","80-84","85 plus") popcount <- c(35274,40958,41574,47973,50384,51248,65748,54854,60948,66473,70854, 60475,61854,55848,45857,30584,25475,20574) region <- "North East" test1 <- as.data.frame(cbind(region,ageband,agenames,popcount)) region <- "North West" test2 <- as.data.frame(cbind(region,ageband,agenames,popcount)) test <- rbind(test1,test2) names(test) <- c("GOR","Band","AgeBand","Persons") # When I plot my numeric data from the df it is treated as character vector... hg1 <- barchart(AgeBand ~ Persons | GOR, data=test, origin=0, layout=c(2,1), reference=TRUE, xlab="Count (Persons)", ylab="Quinary Age Band", scales="free") hg1 # But when I plot the source vectors in the same way, it works how I want it to... (without the region bit, of course) hg2 <- barchart(agenames ~ popcount | region, origin=0, layout=c(2,1), reference=TRUE, xlab="Count (Persons)", ylab="Quinary Age Band", scales="free") hg2 [[alternative HTML version deleted]]
Jim Holtman
2011-Mar-17 03:11 UTC
[R] Numeric vector converted mysteriously to characters in data frame?
take a look at what the output of your cbind is; my guess is that it is a character matrix. you probably want to do data.frame(...,...,...) without the cbind. Sent from my iPad On Mar 16, 2011, at 18:12, Martin Ralphs <martin.ralphs at gmail.com> wrote:> Dear R Help, > > I would be very grateful if somebody could explain why this is happening. I > am trying to plot a lattice barchart of a vector of numbers with age > bandings that I have brought together into a data frame. When I plot the > variables in their raw vector form, it works. When I try to plot them in > the df, R labels the numeric axis with default factor values and treats the > numeric vector as character. Why is this? Apologies if this is blindingly > obvious, I am new to R. > > Here is some sample code that demonstrates the problem: > > library(lattice) > > # Load in some sample data ... > ageband <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18) > agenames <- > c("00-04","05-09","10-14","15-19","20-24","25-29","30-34","35-39", > "40-44","45-49","50-54","55-59","60-64","65-69","70-74","75-79","80-84","85 > plus") > popcount <- > c(35274,40958,41574,47973,50384,51248,65748,54854,60948,66473,70854, > 60475,61854,55848,45857,30584,25475,20574) > > > region <- "North East" > test1 <- as.data.frame(cbind(region,ageband,agenames,popcount)) > region <- "North West" > test2 <- as.data.frame(cbind(region,ageband,agenames,popcount)) > test <- rbind(test1,test2) > names(test) <- c("GOR","Band","AgeBand","Persons") > > # When I plot my numeric data from the df it is treated as character > vector... > > hg1 <- barchart(AgeBand ~ Persons | GOR, > data=test, > origin=0, > layout=c(2,1), > reference=TRUE, > xlab="Count (Persons)", > ylab="Quinary Age Band", > scales="free") > > hg1 > > # But when I plot the source vectors in the same way, it works how I want it > to... (without the region bit, of course) > hg2 <- barchart(agenames ~ popcount | region, > origin=0, > layout=c(2,1), > reference=TRUE, > xlab="Count (Persons)", > ylab="Quinary Age Band", > scales="free") > hg2 > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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.
Martin Ralphs
2011-Mar-17 20:18 UTC
[R] Numeric vector converted mysteriously to characters in data frame?
Thanks Jim, It turns out that the problem was that all columns had been converted to factors.? Once I converted them back to numeric variables the code worked fine.? If anybody is wondering how, you can do this with the following: mynumber <- as.numeric(levels(myfactor))[myfactor] There are plenty of other threads that describe this process fully. Martin On Thu, Mar 17, 2011 at 3:11 AM, Jim Holtman <jholtman at gmail.com> wrote:> > take a look at what the output of your cbind is; my guess is that it is a character matrix. ?you probably want to do > > data.frame(...,...,...) > > without the cbind. > > Sent from my iPad > > On Mar 16, 2011, at 18:12, Martin Ralphs <martin.ralphs at gmail.com> wrote: > > > Dear R Help, > > > > I would be very grateful if somebody could explain why this is happening. ?I > > am trying to plot a lattice barchart of a vector of numbers with age > > bandings that I have brought together into a data frame. ?When I plot the > > variables in their raw vector form, it works. ?When I try to plot them in > > the df, R labels the numeric axis with default factor values and treats the > > numeric vector as character. ?Why is this? ?Apologies if this is blindingly > > obvious, I am new to R. > > > > Here is some sample code that demonstrates the problem: > > > > library(lattice) > > > > # Load in some sample data ... > > ageband <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18) > > agenames <- > > c("00-04","05-09","10-14","15-19","20-24","25-29","30-34","35-39", > > "40-44","45-49","50-54","55-59","60-64","65-69","70-74","75-79","80-84","85 > > plus") > > popcount <- > > c(35274,40958,41574,47973,50384,51248,65748,54854,60948,66473,70854, > > 60475,61854,55848,45857,30584,25475,20574) > > > > > > region <- "North East" > > test1 <- as.data.frame(cbind(region,ageband,agenames,popcount)) > > region <- "North West" > > test2 <- as.data.frame(cbind(region,ageband,agenames,popcount)) > > test <- rbind(test1,test2) > > names(test) <- c("GOR","Band","AgeBand","Persons") > > > > # When I plot my numeric data from the df it is treated as character > > vector... > > > > hg1 <- barchart(AgeBand ~ Persons | GOR, > > ? ? ? ?data=test, > > ? ? ? ?origin=0, > > ? ? ? ?layout=c(2,1), > > ? ? ? ?reference=TRUE, > > ? ? ? ?xlab="Count (Persons)", > > ? ? ? ?ylab="Quinary Age Band", > > ? ? ? ?scales="free") > > > > hg1 > > > > # But when I plot the source vectors in the same way, it works how I want it > > to... (without the region bit, of course) > > hg2 <- barchart(agenames ~ popcount | region, > > ? ? ? ?origin=0, > > ? ? ? ?layout=c(2,1), > > ? ? ? ?reference=TRUE, > > ? ? ? ?xlab="Count (Persons)", > > ? ? ? ?ylab="Quinary Age Band", > > ? ? ? ?scales="free") > > hg2 > > > > ? ?[[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help at 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.