数据框的两列逐行匹配值

时间:2019-04-26 18:43:51

标签: r matching

我有一个类似这样的数据框:

| 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不同,airline_tax与机票不同。

我尝试调查了遇到以下使用以下解决方案时提到的其他问题: df2$Expense_Type[!(df2$Expense_Type %in% df2$Default_Expense)] 但这似乎对我不起作用。

1 个答案:

答案 0 :(得分:2)

%in%运算符不比较每一行。使用==运算符执行此操作。这会将每一行转换为一个布尔值,您可以使用它过滤:-)

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

对于值:

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