2

我有一个简单的数据框data

  V1 V2 V3 V4 V5
1  3  3  3  5  6
2  3  4  6 10 12
3  5  6  8 10 11
4  4  5  7  9 11
5  2  3  5  8  9

该数据代表每轮比赛期间的表现。例如在游戏 4 中,一个人在第三次迭代中得分 7。

我正在尝试创建这样的情节(情节取自这里):

在此处输入图像描述

其中 x 轴上将四舍五入,y 轴上将标准偏差作为条形的平均性能。第一轮的平均表现将在列 V1 (3.4) 中平均,第二轮为 4.2。标准偏差也是基于 V 列计算的。

感谢 BasterField,我正在通过以下方式转换我的数据:

df$n <- rownames(df)
df <- melt(df, id.vars="n", value.name="perf", variable.name="iter" )
dfc <- ddply(df, .(iter), summarise, se = sd( perf )/sqrt(length(perf)), perf = mean(perf))

这给了我以下结果:

  iter        se perf
1   V1 0.5099020  3.4
2   V2 0.5830952  4.2
3   V3 0.8602325  5.8
4   V4 0.9273618  8.4
5   V5 1.0677078  9.8

但后来,当我尝试使用 ggplot

ggplot(dfc, aes(x=iter, y=perf))+geom_errorbar(aes(ymin=perf-se, ymax=perf+se), width=.1)+geom_line()+geom_point()

我收到:geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic? 情节是在没有连接线的情况下构建的:在此处输入图像描述

另外我希望我的 Y 轴的最大值为 20。

4

1 回答 1

3

您可以使用以下方法熔化data.frame从宽格式到长格式reshape2::melt

library( reshape2 )
mdf$n <- rownames(mdf)
mdf <- melt( mdf, id.vars="n", value.name="perf", variable.name="iter" )
mdf

   n iter perf
1  1   R1    4
2  2   R1    2
3  3   R1    1
4  1   R2    5
5  2   R2    3
6  3   R2    1
...

关于你的实际问题

我试图实现的是没有对数据框进行操作,但没有任何运气。

您应该知道,它ggplot旨在处理长格式的 data.frames。因此,首先融化然后绘制的过程是绝对常见的。有时两者之间还有一个拆分-应用-组合-步骤,正如您用 指示的那样summarySE。在不知道这个功能的情况下,我猜它会做类似的事情

library( plyr)
mdf <- ddply( mdf, .(n), summarise, se = sd( perf )/sqrt(length(perf)), perf = mean(perf)) 
mdf
  n        se perf
1 1 1.0198039  6.8
2 2 0.2000000  2.8
3 3 0.7483315  2.4

使用你展示的 plot 命令你会得到 在此处输入图像描述

于 2013-05-25T21:03:35.203 回答