【问题标题】:R Question: ifelse producing unexpected resultsR问题:ifelse产生意想不到的结果
【发布时间】:2011-01-18 21:04:00
【问题描述】:

我是 R 新手,在使用 ifelse() 函数时得到了意想不到的结果。这是一个例子。下面是我正在使用的数据框的一个子集。在最后一条命令之后,为什么 example$Points 列包含 12 而不是 2?我已经尝试了许多不同的 example$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 的变通方法,但我想避免这种情况并深入了解这里发生的情况。

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

【问题讨论】:

  • 能否提供str(example)dput(example[2926:2930,])的输出?
  • 你能在干净的 R 会话中尝试吗?当我尝试你的代码时,我得到了想要的结果。不要调用数据框example,因为那是一个 R 函数;尝试不同的名称。您还可以简化代码以使用within();如果我在数据帧DF 中有您的数据,DF &lt;- within(DF, Points &lt;- ifelse(Answer == "Co", Value, Points)) 将执行与您的代码相同的操作,而无需重复所有DF$ 位(在您的情况下为exmaple$)。

标签: r if-statement dataframe


【解决方案1】:

我的猜测是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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-01-05
    • 2017-02-23
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 2011-06-04
    相关资源
    最近更新 更多