[R] replace string values with numbers

David Winsemius dwinsemius at comcast.net
Wed Sep 26 23:35:33 CEST 2012


On Sep 26, 2012, at 2:27 PM, David Winsemius wrote:

> 
> On Sep 26, 2012, at 12:52 PM, JiangZhengyu wrote:
>> 
>> Hi everyone, I have a data frame Gene with SNPs eg.   P1 P2 P3 
>> CG CG GG
>> -- --  AC 
>> -- AC CC
>> AC  --  AC I tried to replace all the GG with a value 3.    Gene[Gene=="GG"]<-3 It always give me:  Warning in `[<-.factor`(`*tmp*`, thisvar, value = 3) :
>> invalid factor level, NAs generated Does any know if there is anything wrong with my code?
> 
> You are trying to replace a factor value with a level that it doesn't have. Hence that particular very informative error message.

You probably could do this:

Gene[] <- lapply(Gene, as.character)
> Gene
  P1 P2 P3
1 CG CG GG
2 -- -- AC
3 -- AC CC
4 AC -- AC

The use of the form `object[] <-` preserves the original dimensions. You would otherwise have needed to use data.frame() around the result.


> Gene[Gene=="GG"] <- 3
> Gene
  P1 P2 P3
1 CG CG  3
2 -- -- AC
3 -- AC CC
4 AC -- AC


> and provide commented, minimal, self-contained, reproducible code.

Your code was not really self-contained and reproducible, but what I did was this:

Gene <- read.table(text="P1 P2 P3 
 CG CG GG
 -- --  AC 
 -- AC CC
 AC  --  AC", header=TRUE)

read.table will by default create factors when the input column contains character values unless you use stringsAsFactors=FALSE.

-- 

David Winsemius, MD
Alameda, CA, USA




More information about the R-help mailing list