John Kane
2007-Apr-20 14:48 UTC
[R] Fwd: Re: Character coerced to factor and I cannot get it back
--- John Kane <jrkrideau at yahoo.ca> wrote:> Date: Fri, 20 Apr 2007 10:47:45 -0400 (EDT) > From: John Kane <jrkrideau at yahoo.ca> > Subject: Re: [R] Character coerced to factor and I > cannot get it back > To: jim holtman <jholtman at gmail.com> > > Thanks Jim, > > I can live with it as a factor or I will do as you > suggest. What is bothering me is that I cannot seem > to reliably convert it to a character and have it > stay one when I incorporate it into a data.frame. > > Now that I know what is happening I can work around > it > but what happens the next time when I do a similar > cbind? > > I cannot see why I get a factor when I deliberately > so as as.character(x) command. > > Have I stumbled over a bug or is this how R is > supposed to work ? Here is the problem in it's > simplest form. > aa <- c('a','b','c','d', 'e') > bb <- 11:15 > dd <- data.frame(bb, aa) > class(dd[,1]) > class(dd[,2]) > > > ddd <- data.frame(bb, as.character(aa)) > class(ddd[,1]) > class(ddd[,2]) > > If you run these "aa" is converted to a factor in > each > case. > > > sessionInfo() > R version 2.4.1 (2006-12-18) > i386-pc-mingw32 > > locale: >LC_COLLATE=English_Canada.1252;LC_CTYPE=English_Canada.1252;LC_MONETARY=English_Canada.1252;LC_NUMERIC=C;LC_TIME=English_Canada.1252> > attached base packages: > [1] "stats" "graphics" "grDevices" "utils" > "datasets" "methods" > [7] "base" > > > > --- jim holtman <jholtman at gmail.com> wrote: > > > Then convert it to a character and leave it there, > > or add another > > column with the value in characters. If you leave > > it as a factor, you > > just have to remember to use the 'as.character' at > > the appropriate > > times. > > > > On 4/19/07, John Kane <jrkrideau at yahoo.ca> wrote: > > > > > > --- jim holtman <jholtman at gmail.com> wrote: > > > > > > > To convert the 'factor' to 'numeric': > > > > > > > > as.numeric(as.character(dd1$st)) > > > > > > But I don't want it converted to numeric. It is > a > > > site id which I would actually prefer as a > > character > > > variable. In this case I really don't mind it > > being a > > > factor. It is more I am just annoyed that I > cannot > > > coerce it to character and keep it there for I > may > > > need to coerce some other factors to character > and > > I > > > wondered what I was doing wrong. > > > > > > Thanks > > > > > > > > > > > > > > > On 4/19/07, John Kane <jrkrideau at yahoo.ca> > > wrote: > > > > > Something probably obivous but I don't see > it. > > I > > > > > needed to find the first 1 or two digits of > > some 5 > > > > and > > > > > 6 digit numbers since they identified > research > > > > sites > > > > > while the rest of the number was the plot > id. > > > > > > > > > > I converted the numbers to characters, got > the > > > > first 1 > > > > > or 2 characters as appropriate and went to > > add > > > > the > > > > > new vector to the data.frame. For some > reason > > R > > > > is > > > > > insisting on turning the character variables > > into > > > > > factors. This is alright since they really > > are > > > > > factors anyway but I took me a while to > > realise > > > > what > > > > > was happening. > > > > > > > > > > For convenience, because of the way I had > > defined > > > > some > > > > > other variables it tried to coerce the > > variable > > > > back > > > > > into character and I cannot. > > > > > > > > > > Can anyone explain what I am doing wrong or > > where > > > > I am > > > > > misunderstanding what R is doing and why? > > > > > > > > > > Thanks > > > > > > > > > > EXAMPLE > > > > > > > > > > mylist <- list(dd <- data.frame(aa <- 1:4, > > bb <- > > > > > letters[1:4], > > > > > cc <- c(12345, 123456, 45678, > > 456789)), > > > > > vec <- letters[1:10] ) > > > > > > > > > > #Get data frame from list > > > > > dd <- mylist[[1]] > > > > > attach(dd) > > > > > > > > > > # Convert numeric id to character id > > > > > id <- as.character(dd[,3]) ; id > > > > > # get site designators (first one or two > > > > characters of > > > > > id > > > > > > > > > > st <- substring(id, 1,nchar(id)-4 ) ; st > > > > > typeof (st) ; class(st) > > > > > > > > > > dd1 <- cbind(dd, st) > > > > > names(dd1) <- c("aa","bb","cc","st") > > > > > dd1 > > > > > typeof(dd1$st); class(dd1$st) > > > > > > > > > > dd2 <- cbind(dd, as.character(st)) > > > > > names(dd2) <- c("aa","bb","cc","st") > > > > > dd2 > > > > > typeof(dd2$st) ; class(dd2$st) > > > > > > > > > > > ______________________________________________ > > > > > R-help at stat.math.ethz.ch 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. > > > > > > > > > > > > > > > > > -- > > > > Jim Holtman > > > > Cincinnati, OH > > > > +1 513 646 9390 > > > > > > > > What is the problem you are trying to solve? > > > > > > > > > > > > > > > > Ask a question on any topic and get answers > > from real people. Go to Yahoo! Answers and share> > > > > > > > > -- > > Jim Holtman > > Cincinnati, OH > > +1 513 646 9390 > > > > What is the problem you are trying to solve? > > > > > > Be smarter than spam. See how smart SpamGuard > is at giving junk email the boot with the All-new> http://mrd.mail.yahoo.com/try_beta?.intl=ca > >