[R] create new column by replacing multiple unique values in existing column

John McKown john.archie.mckown at gmail.com
Thu Sep 11 18:16:43 CEST 2014

On Thu, Sep 11, 2014 at 10:49 AM, raz <barvazduck at gmail.com> wrote:
> Hi,
> I got the following data frame:
>  dat1 <- read.table(text="a,b
> 1,A1
> 2,A1
> 3,A1
> 4,A1
> 5,A1
> 6,A2
> 7,A2
> 8,A2
> 9,A2
> 10,A2
> 11,B1
> 12,B1
> 13,B1
> 14,B1
> 15,B1",sep=",",header=T)
> I would like to add a new column dat1$new based on column "b" (dat$b) in
> which values will be substituted according to their unique values e.g "A1"
> will be "1", "A2" will be "2" and so on (this is only a part of a large
> table). It would be better if I could change all unique values in dat1 to
> numbers 1:unique(n). if not then how do I change all values
> ("A1","A2","B1") to (1,2,3) in a new column?.
> Thanks a lot,
> Raz
> --
> \m/
>         [[alternative HTML version deleted]]

Please change your email client to post only in plain text, no HTML. Thanks.

And, lucky you. You __already__ have what you want in the table. Try
the following:


Hum, you just get what you're expecting. Things like A1 and B1 and so
on. Now try:


Whoa! You have unique integers based on the values in column b! That's
because the data in column b is a __factor__. And the as.integer()
prints the factor number instead of the factor value. If column b is
not a factor, then you can make it one with a simple: dat1$b <-
as.factor(dat1$b); it you really want it in a separate column for some
reason: dat1$new <- as.integer(dat1$b); But then you are responsible
for keeping columns b and new "in sync". Keeping/making column b a
factor lets you use as.integer() and you are GOLDEN!

There is nothing more pleasant than traveling and meeting new people!
Genghis Khan

Maranatha! <><
John McKown

More information about the R-help mailing list