开发者

R Question: ifelse producing unexpected results

开发者 https://www.devze.com 2023-02-05 22:42 出处:网络
I am new to R and am getting unexpected results while using the ifelse() function. Here is an example. Below is a subset of the data frame I am working with. After the last command, why does the examp

I am new to R and am getting unexpected results while using the ifelse() function. Here is an example. Below is a subset of the data frame I am working with. After the last command, why does the example$Points column contain 12 instead of 2? I have tried this for many different values of example$Value and the result is always 10 more than what I expect.

Examp开发者_如何学编程le:

example
     Question StudentID SchoolID Value Worth Answer Points
2926       18    101290    84386     2     2     Co      0
2927       18    100878    84386     2     2     Co      0
2928       18    100895    84386     1     5     Co      0
2929       18    100913    84386     2     2     Co      0
2930       18    100884    84386     2     2     Co      0
example$Points <- ifelse(example$Answer == "Co", example$Value, example$Points)
example
     Question StudentID SchoolID Value Worth Answer Points
2926       18    101290    84386     2     2     Co     12
2927       18    100878    84386     2     2     Co     12
2928       18    100895    84386     1     5     Co     11
2929       18    100913    84386     2     2     Co     12
2930       18    100884    84386     2     2     Co     12

I've been using the work-around of just then subtracting 10 from the column, but I would like to avoid this and get to the bottom of what is going on here.

Any help would be greatly appreciated. Thank you!


My guess is that example$Value is a factor and you're getting the underlying codes instead of the labels. I recommend taking a look at your data as soon as it's read into R to see what's causing your input method to treat those values as factors instead of integer / numeric.


I have no idea, because when I run this on my machine I get the right answer:

> print(example)
  Question StudentID SchoolID Value Worth Answer Points
1       18    101290    84386     2     2     Co      0
2       18    100878    84386     2     2     Co      0
3       18    100895    84386     1     5     Co      0
4       18    100913    84386     2     2     Co      0
5       18    100884    84386     2     2     Co      0
> 
> example$Points <- ifelse(example$Answer == "Co", example$Value, example$Points)
> 
> print(example)
  Question StudentID SchoolID Value Worth Answer Points
1       18    101290    84386     2     2     Co      2
2       18    100878    84386     2     2     Co      2
3       18    100895    84386     1     5     Co      1
4       18    100913    84386     2     2     Co      2
5       18    100884    84386     2     2     Co      2

Here's the code that I'm using:

example = read.table('data.txt', header = T)
print(example)
example$Points <- ifelse(example$Answer == "Co", example$Value, example$Points)
print(example)

Here's data.txt:

Question StudentID SchoolID Value Worth Answer Points
18    101290    84386     2     2     Co      0
18    100878    84386     2     2     Co      0
18    100895    84386     1     5     Co      0
18    100913    84386     2     2     Co      0
18    100884    84386     2     2     Co      0

Hopefully this helps. What happens when you print out the type of example$Value? Try this:

print( typeof(example$Value) )
[1] "integer"

If that comes out as a factor, then that might explain your odd results.

0

精彩评论

暂无评论...
验证码 换一张
取 消