[R] Recoding -- test whether number begins with a certain number
Barry Rowlingson
b.rowlingson at lancaster.ac.uk
Wed Nov 3 12:37:12 CET 2010
On Wed, Nov 3, 2010 at 10:01 AM, Marcel Gerds <Marcel.Gerds at gmx.de> wrote:
> Dear R community,
>
> I have a question concerning recoding of a variable. I have a data set
> in which there is a variable devoted to the ISCO code describing the
> occupation of this certain individual
> (http://www.ilo.org/public/english/bureau/stat/isco/isco88/major.htm).
> Every type of occupation begins with a number and every number added to
> this number describes th occupation more detailed.
> Now my problem: I want to recode this variable in a way that every value
> beginning with a certain number is labeled as the respective category.
> For example, that all values of this variable beginning with a 6 is
> labeled as "agri".
> My problem is that I cannot find a test which I can use for that purpose.
>
> I would really appreciate any help on that subject. Thank you.
If it's a numeric variable, convert to character with 'as.character'.
Then check the first character with substr(x,1,1). Then create a
factor and set the levels...
> z=as.integer(runif(10,0,100))
> z
[1] 26 92 47 99 2 98 15 21 58 82
> zc=factor(substr(as.character(z),1,1))
> zc
[1] 2 9 4 9 2 9 1 2 5 8
Levels: 1 2 4 5 8 9
> levels(zc)=c("Foo","Bar","Baz","Qux","Quux","Quuux")
> zc
[1] Bar Quuux Baz Quuux Bar Quuux Foo Bar Qux Quux
Levels: Foo Bar Baz Qux Quux Quuux
> data.frame(z=z,zc=zc)
z zc
1 26 Bar
2 92 Quuux
3 47 Baz
4 99 Quuux
5 2 Bar
6 98 Quuux
7 15 Foo
8 21 Bar
9 58 Qux
10 82 Quux
Now all the 9-somethings are Quuux, the 2's are Bar etc etc.
Barry
More information about the R-help
mailing list