2011-01-18 2 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,])'? –

+0

Можете ли вы попробовать это в чистой сессии R? Я получаю желаемый результат, когда я пытаюсь выполнить код. Не вызывайте фрейм данных 'example', поскольку это функция R; попробуйте другое имя. Вы также можете упростить код для использования 'inside()'; если у меня есть данные в фрейме данных 'DF',' DF <- внутри (DF, Points <- ifelse (Ответ == "Co", Value, Points)) 'будет делать то же, что и ваш код, не повторяя все бит 'DF $' ('exmaple $' в вашем случае). –

ответ

7

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

+0

Да, вы правы, это факторы. Это отвечает на мой вопрос. Спасибо! –

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" 

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

Смежные вопросы