Допустим, у меня есть примерный набор данных, p1, где разные пользователи оценивали 4 различных типа пищи, например:
Food_ID Rating
1 Good
1 Good
2 Good
2 Bad
1 Bad
3 Bad
3 Good
4 Bad
1 Bad
4 Good
4 Good
4 Good
2 Bad
3 Bad
Как мне написать код, который сообщит мне рейтинг приемлемостиFood_ID на основе оценок «хорошо» или «плохо»?
SELECT
Food_ID,
sum(Rating)/count(Rating) AS Avg_Rating
FROM p1
GROUP BY Food_ID
Очевидно, что этот код не будет работать, поскольку рейтинг - это столбец символов ... есть ли быстрый способ преобразовать его в логическое значение?Тогда возможно это могло бы?Или вообще есть более простой способ?
Спасибо!
РЕДАКТИРОВАТЬ ОБНОВЛЕНИЕ:
Благодаря ответам ниже, я добился прогресса.Следующий код:
sqldf("
SELECT food_id,
sum(CASE WHEN rating = 'Good' THEN 1 ELSE 0 END) AS good_reviews,
count(*) AS all_reviews,
sum(CASE WHEN rating = 'Good' THEN 1 ELSE 0 END) / count(*) AS acceptance
FROM p1
GROUP BY food_id
")
, который возвращает следующий вывод:
food_id good_reviews all_reviews acceptance
1 2 4 0
2 1 3 0
3 0 3 0
4 3 4 0