2015-08-31 2 views
1

У меня возникли проблемы с использованием файла csv и его интеграцией в мой код.Заявления if-else с использованием файла csv

Например: Скажем, у меня есть большой набор данных, давайте назовем его данными, с 1000 рядами только случайных цветов, строка столбца с именами цветов.

Кроме того, у меня есть другой набор данных, назовем его second, с двумя колонками: If и Then. Предположим, что столбец If содержит несколько случайных цветов, а then - это число.

Я хочу, чтобы код был заменен data$colors номером в столбце then.

Почему

ifelse(data$colors == second$If, data$colors == second$then, data$colors == data$colors) 

не работает?

+2

Потому что вам нужно '% in%' вместо '=='. Возможно, вы могли бы написать 'с (data, ifelse (цвета% in% second $ If, second $ then, colors))' –

+1

Кроме того, ваш код - это ничего, кроме тестов с '==', которые всегда возвращают TRUE of FALSE. Мне кажется, что вы должны «объединить» свои «данные» на «second», а затем написать инструкцию 'ifelse'. – Gregor

ответ

0

Возможно, есть две причины, по которым ifelse(data$colors == second$If, data$colors == second$then, data$colors == data$colors) не работает. Внутренняя причина заключается в том, что функция «==» не является критерием для сдерживания набора, а скорее представляет собой векторизованную функцию, которая, вероятно, не будет успешно соответствовать значениям в столбцах двух разных кадров данных. Вероятно, вы хотите использовать %in%, как было упомянуто в комментарии Ричарда. Но, что еще более важно, вы не присвоили значение функции ifelse ни для чего. ... (И IfElse не делает назначение в рамках последовательных и альтернативных выражений R является функциональным языком Вы действительно только сделать полезные действия, когда вы назначаете значение объекта Вы бы вместо того, чтобы сделать что-то вроде:

data$colors[ data$colors %in% second$If] <- second$then[ match(data$colors, second$If) ] 

Это будет заменить любое значение data$colors со значением seconds$then индексируется вектором положения data$colors -Value в пределах second$If -вектора.

(по крайней мере, это то, что я думаю, что должно произойти. Вы не предусмотрены никаких данных испытаний и многие мы здесь думаем, что это ваша ответственность, а не наша. Поэтому эта теория не проверена на логические или синтаксические ошибки на моем уровне т. Стандартная гарантия на интернет-консультацию: если она ломается, вы можете сохранить все части.)

+0

Привет, к сожалению, из-за связанных с работой вопросов, я не смог предоставить образец данных. Тем не менее, я получаю сообщение об ошибке: «количество элементов для замены не кратно длины замены», используя вашу строку кода. Есть предположения? –

+0

Требование «связанных с работой вопросов», препятствующих построению примера, неубедительно. Измените все имена столбцов и запустите все данные, а затем опубликуйте их с помощью 'dput()'. –

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