[R] Automatic Recoding

David Winsemius dwinsemius at comcast.net
Thu Sep 1 18:23:37 CEST 2011


On Sep 1, 2011, at 10:54 AM, Thomas Chesney wrote:

> I have a text file full of numbers (it's a edgelist for a graph) and  
> I would like to recode the numbers as they are way too big to work  
> with. So for instance the following:
>
> 676529098667    1000198767829
> 676529098667    100867672856227
> 676529098667    91098726278
> 676529098667    98928373
> 1092837363526   716172829
>
> would become:
>
> 0   1
> 0   2
> 0   3
> 0   4
> 5   6
>
> i.e. all 676529098667 would become 0, all 1000198767829 would become  
> 1 etc.

Depending on how that set of numbers was entered see if this is helpful:

1) First entering across first then down.

  x <- c(676529098667 ,   1000198767829,
  676529098667 ,   100867672856227,
  676529098667  ,  91098726278,
  676529098667   , 98928373,
  1092837363526   ,716172829)
  as.numeric(factor(x, levels=unique(x))  )
# [1] 1 2 1 3 1 4 1 5 6 7

2( Now entering first down then over.

  x2 <- matrix(x, ncol=2, byrow=TRUE) # Matrices are column first  
ordered.

  as.numeric(factor(x2, levels=unique(c(x2))) ) # need c() to avoid  
warning.
# [1] 1 1 1 1 2 3 4 5 6 7

> If I read all the values into a matrix, is there a pre-existing  
> function that can do the recoding?

You can just subtract one from the factor results. The trick is to use  
explicit levels determined to match the sort order you want. Other  
wise the levels would be first collated.

-- 
David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list