我是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的解决方法,但我想避免这种情况并深入了解此处发生的事情。
非常感谢任何帮助。谢谢!
答案 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"
如果这是一个因素,那么这可能解释了你的奇怪结果。