R Вопрос: ifelse дает неожиданные результаты - PullRequest
2 голосов
/ 19 января 2011

Я новичок в 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 ]

7 голосов
/ 19 января 2011

Я предполагаю, что example$Value является фактором, и вы получаете базовые коды вместо меток.Я рекомендую взглянуть на ваши данные, как только они будут прочитаны в R, чтобы понять, что заставляет ваш метод ввода обрабатывать эти значения как факторы вместо целых / числовых.

2 голосов
/ 19 января 2011

Понятия не имею, потому что когда я запускаю это на своей машине, я получаю правильный ответ:

> 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"

Если это проявится как фактор, то это может объяснить ваши странные результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...