2017-01-15 1 views
2

Я пытаюсь сравнить, если содержимое одного столбца равно или отличается от содержимого другого.Сравнение содержимого двух столбцов с dplyr

Response <- c("Old", "New", "Old", "New") 
Correct_answer <- c("New", "Old", "Old", "New") 
comparison <- data.frame(Response, Correct_answer) 

Я попытался это:

mutate(comparison, Resp_final = ifelse(grepl("Old", Response), "1", 
            ifelse(grepl("New", Response), "2", ""))) 

Но только проверяет для столбца "Response". Как я могу сравнить столбцы «Ответ» и «Исправить ошибки» и получить результат в одном столбце, используя dplyr?

Спасибо!

+0

Вы хотите проверить на равенство, или вы также хотите проверить, насколько * они равны? – yeedle

ответ

2

Если единственное, что вы заботитесь о равенстве, то простой if_else будет делать:

comparison %>% mutate(Resp_final = if_else(Response == Correct_answer, 1, 0)) 

Но если вы хотите, чтобы сравнить не только являются ли они равны, но также как они равны, вам может сделать это с case_when так:

comparison %>% 
    mutate(Resp_final = case_when(
    Response == Correct_answer & Response == "Old" ~ "1", 
    Response == Correct_answer & Response == "New" ~ "2", 
    TRUE           ~ "")) 

Выход:

## Response Correct_answer resp_final 
## 1  Old   New   
## 2  New   Old   
## 3  Old   Old   1 
## 4  New   New   2 
+0

Большое спасибо! Я хочу знать не только то, как эти два столбца равны, но и то, как они отличаются. Например, если в столбце «Ответ» есть «Новый» и «Старый» в столбце Correct_answer, я хотел бы видеть, что разница отражается в resp_final. – Simon

+0

Просто добавьте их в качестве условных обозначений функции case_when – yeedle

+0

Спасибо. Я это сделаю. – Simon