Re: [R] Converting factors back to numbers. Trouble with SPSS importdata

From: Duncan Murdoch <murdoch_at_stats.uwo.ca>
Date: Mon 20 Feb 2006 - 12:12:25 EST

On 2/19/2006 7:53 PM, Paul Johnson wrote:
> On 2/19/06, Robert W. Baer, Ph.D. <rbaer@atsu.edu> wrote:

>> Quoted directly from the FAQ (although granted I need to look this up over
>> and over, myself.  Would that it had a easily remembered wrapper function):
>> 7.10 How do I convert factors to numeric?
>> It may happen that when reading numeric data into R (usually, when reading
>> in a file), they come in as factors. If f is such a factor object, you can
>> use
>>
>>      as.numeric(as.character(f))
>> to get the numbers back. More efficient, but harder to remember, is
>>
>>      as.numeric(levels(f))[as.integer(f)]

>
> I don't think I have that problem described in the FAQ. I've had that
> before, though.
>
> Observe. Here's the original thing:
>
>> eldatfac$HAPPY[1:10]

> [1] Happy Happy Very happy Happy Very happy Very happy
> [7] Happy Very happy Happy Very happy
> 6 Levels: Not happy at all Not very happy Happy Very happy ... Refused
>
> Here's the result of the first thing you cite from the FAQ
>
>> as.numeric(as.character(eldatfac$HAPPY))[1:10]

> [1] NA NA NA NA NA NA NA NA NA NA
> Warning message:
> NAs introduced by coercion
>
> Here's the second thing from the FAQ
>
>> as.numeric(levels(eldatfac$HAPPY))[as.integer(eldatfac$HAPPY)]

> [1] NA NA NA NA NA NA NA NA NA NA
> Warning message:
> NAs introduced by coercion
>
> What am I missing here?

You're right, you have a different problem. The FAQ is talking about the situation where the data in a file is numeric but is read as a factor, perhaps because of typos in one or two values.

In your case, levels(eldatfac$HAPPY) will tell you the correspondence between R's internal numbers and labels. It's not the same as SPSS uses; as far as I know that coding is lost at this point. You'll need to work out the coding you want to use and do it yourself. For example, if the 1st 4 codes should be 0:3 and the others NA, you could use

encoding <- c(0:3, NA, NA)
encoding[as.integer(eldatfac$HAPPY)]

Duncan Murdoch



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 Received on Mon Feb 20 13:10:12 2006

This archive was generated by hypermail 2.1.8 : Tue 21 Feb 2006 - 14:38:21 EST