[R] Fwd: Re: Character coerced to factor and I cannot get it back --- John Kane  wrote: > Date: Fri, 20 Apr 2007 10:47:45 -0400 (EDT) > From: John Kane  > Subject: Re: [R] Character coerced to factor and I > cannot get it back > To: jim holtman  >  > 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  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  wrote: > > > > > > --- jim holtman  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  > > 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@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 >  > ______________________________________________ R-help@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.