Я имею (очень) базовый уровень компетенции в R при работе с числами, но когда дело доходит до манипулирования данными на основе текстовых значений в столбцах, я застрял.Например, если я хочу построить график зависимости частоты приема пищи от дня недели (действительно ли вторник для тако?) С использованием следующего фрейма данных, как мне это сделать?Я видел предложения tapply, aggregate, colSums и других, но все они были для немного разных сценариев, и ничто не дает мне то, что я ищу.Должен ли я смотреть на что-то другое, чем R для этой проблемы?Моя конечная цель - график с указанием дня недели на оси X, подсчета на оси Y и линейного графика для каждого приема пищи.
df <- data.frame(meal= c("tacos","spaghetti","burgers","tacos","spaghetti",
"spaghetti"), day = c("monday","tuesday","wednesday","monday","tuesday","wednesday"))
Это так близко, как я получил,и, если честно, я не до конца понимаю, что он делает:
tapply(df$day, df$meal, FUN = function(x) length(x))
Он будет суммировать количество приемов пищи, но а) у него нет имен столбцов (насколько я понимаю, это связано свозвращая вектор), и б) он не сохраняет связь с днем недели.
Редактировать: Предложение melt()
, приведенное ниже, работает для этого набора данных, но не масштабируется до размераЯ нуждаюсь.Однако я смог получить рабочий график из кадра данных, созданного расплавом.Если кто-нибудь столкнется с этим в будущем, попробуйте:
ggplot(new, aes(day, value, group=meal, col=meal)) +
geom_line() + geom_point() + scale_y_continuous(breaks = function(x)
unique(floor(pretty(seq(0, (max(x) + 1) * 1.1)))))
(Часть после geom_point()
состоит в том, чтобы заставить ось Y быть только целыми числами, что имеет смысл в этом случае.)