我的数据如下所示。我需要为csv文件中的lineplot/barplot
和val
之类的每个组平均创建status
的{{1}}。
category
格式的数据。
dput
我尝试了以下代码,但无法弄清整个问题。
df <-
structure(list(val = c(4608, 4137, 6507, 5124,
3608, 34377, 5507, 5624, 4608, 4137, 6507, 5124,
3608, 3437, 5507, 5507, 5624), status = c("1x",
"1x", "1x", "2x", "2x", "2x", "2x", "2x", "50xy",
"50xy", "50xy", "60xy", "60xy", "70xy", "xyz",
"xyz", "xyz"), category = c("A", "C", "A", "A",
"A", "B", "B", "C", "B", "C", "A", "B", "C",
"B", "B", "C", "C")), row.names = c(NA,
-17L), class = "data.frame")
在单个窗口中帮助绘制它们(每组明智,例如为每个library(ggplot2)
ggplot(df, aes(x = status, y = val, group = category, color = source)) +
geom_smooth(method = "loess")
和val
绘制均值2x
)将不胜感激。谢谢。
答案 0 :(得分:1)
您可以这样做:
library(dplyr)
library(ggplot2)
df %>%
group_by(category, status) %>%
mutate(agg = mean(val)) %>%
ggplot(., aes(status, agg, fill = category, color=status))+
geom_col(position = "dodge")
答案 1 :(得分:1)
此问题已经有一个accepted answer,需要计算汇总
mean(val)
的{{1}},status
组事先。
但是,category
包含 transformations (或 stats ),使我们能够在不使用其他程序包的情况下一次性创建所需的情节:
ggplot2
这将创建平均值as requested by the OP的折线图:
或者,我们可以告诉library(ggplot2)
ggplot(df, aes(x = status, y = val, group = category, colour = category)) +
stat_summary(geom = "line", fun.y = "mean")
使用摘要统计信息:
geom_line
将创建相同的图。
ggplot(df, aes(status, val, group = category, colour = category)) +
geom_line(stat = "summary", fun.y = "mean")
也可以用于显示原始数据和汇总统计信息,并汇总在一个图中:
stat_summary()
这可以帮助更好地了解基础数据的结构,例如离群值。请注意不同的y比例尺。