Сопоставьте значения строка за строкой двух столбцов фрейма данных - PullRequest
1 голос
/ 26 апреля 2019

У меня есть фрейм данных примерно так:

| Employee | Expense_Type    | Default_Expense | Amount |   |
|----------|-----------------|-----------------|--------|---|
| John     | Airfare         | Airfare         | 1000   |   |
| David    | Hotel_Tax       | Hotel           | 50     |   |
| Nancy    | Miscellaneous   | Undefined       | 500    |   |
| Mike     | Individual_Meal | Individual_Meal | 75     |   |
| Jenny    | Airline_tax     | Airfare         | 125    |   |

Я хочу сравнивать столбцы «Expense_Type» и «Default_Expense» строка за строкой и генерировать новый столбец для вставки значений, которые не соответствуют,Например, из приведенной выше таблицы видно, что строки №№ 2, 3 и 5 не совпадают, так как hotel_tax отличается от hotel, разное отличается от undefined, а Airlines_tax отличается от стоимости авиабилета.

Я пытался разобраться в разных проблемах, упомянутых выше, где я нашел следующее решение: df2$Expense_Type[!(df2$Expense_Type %in% df2$Default_Expense)], но мне это не помогло.

1 Ответ

2 голосов
/ 26 апреля 2019

Оператор %in% не сравнивает каждую строку.Используйте оператор == для этого.Это преобразует каждую строку в логическое значение, которое вы можете использовать для фильтрации: -)

df2[df2$Expense_Type == df2$Default_Expense, ]

Для значения:

df$newcol <- ifelse(df2$Expense_Type == df2$Default_Expense, "Correct", "Wrong")
...