R问题:ifelse产生意外结果

时间:2011-01-18 21:04:01

标签: r if-statement dataframe

我是R的新手,在使用ifelse()函数时会得到意想不到的结果。这是一个例子。下面是我正在使用的数据框的子集。在最后一个命令之后,为什么示例$ Points列包含12而不是2?我已经尝试了这个示例$ Value的许多不同值,结果总是比我预期的多10个。

示例:

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

我一直在使用从列中减去10的解决方法,但我想避免这种情况并深入了解此处发生的事情。

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:7)

我的猜测是example$Value是一个因素,你得到的是基础代码而不是标签。我建议您在读入R后立即查看数据,看看是什么原因导致您的输入法将这些值视为因子而非整数/数字。

答案 1 :(得分:2)

我不知道,因为当我在我的机器上运行时,我得到了正确的答案:

> 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

这是我正在使用的代码:

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

这是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

希望这会有所帮助。打印出示例$ Value的类型会发生什么?试试这个:

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

如果这是一个因素,那么这可能解释了你的奇怪结果。