2011-01-18 52 views
2

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

例子:

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的变通,但我想避免这种情况,并获得这到底是怎么回事的底部。

任何帮助将不胜感激。谢谢!

+4

你能提供`str(example)`或`dput(例如[2926:2930,])的输出吗? – 2011-01-18 21:16:37

+0

你可以在干净的R会话中尝试一下吗?当我尝试你的代码时,我会得到期望的结果。因为这是一个R函数,所以不要调用数据框`example`;尝试一个不同的名字。你也可以简化代码以使用`within()`;如果我的数据在数据框“DF”中,则DF < - 内(DF,Points < - ifelse(Answer ==“Co”,Value,Points))`将与您的代码相同,而不必重复所有'DF $`位(在你的情况下是`exmaple $`)。 – 2011-01-18 21:19:24

回答

7

我的猜测是example$Value是一个因素,你得到的是底层代码而不是标签。我建议在读入R后尽快查看数据,以查看导致输入方法将这些值视为因子而非整数/数字的原因。

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" 

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

相关问题