首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用R中数据框的平均值和标准差绘制单个数据点

如何使用R中数据框的平均值和标准差绘制单个数据点
EN

Stack Overflow用户
提问于 2013-03-12 19:49:48
回答 4查看 3.3K关注 0票数 0

我在R中有一个很大的数据帧,格式如下:

代码语言:javascript
复制
"SubjID"    "HR"    "IBI"   "Stimulus"  "Status"
"S1"    75.98   790 1   1
"S1"    75.95   791 1   2
"S1"    65.7    918 1   3
"S1"    59.63   100 1   4
"S1"    59.44   101 1   5
"S1"    59.62   101 2   1
"S1"    63.85   943 2   2
"S1"    60.75   992 2   3
"S1"    59.62   101 2   4
"S1"    61.68   974 2   5
"S2"    65.21   921 1   1
"S2"    59.23   101 1   2
"S2"    61.23   979 1   3
"S2"    70.8    849 1   4
"S2"    74.21   809 1   4

我想为status列的每个值绘制"HR“列的平均值。

我写了下面的R代码,其中我创建了数据的一个子集(通过不同的“Status”值)并绘制它:

代码语言:javascript
复制
numberOfSeconds <- 8;

    for(stimNumber in 1:40) {

    stimulus2plot <- subset(resampledDataFile, Stimulus == stimNumber & Status <= numberOfSeconds, select=c(SubjID, HR, IBI, Stimulus, Status))

    plot(stimulus2plot$HR~stimulus2plot$Status, xlab="",ylab="")
    lines(stimulus2plot$HR~stimulus2plot$Status, xlab="",ylab="")

    }

从而得到类似如下的曲线图:

我对每个“刺激”都有一张图。在每个绘图的X轴上,我有"Status“列,在Y轴上,每个"SubjID”都有一个"HR“值。就快到了..。

然而,我最终想要获得的是每个X值的一个Y数据点。即Y应为平均值( HR列的平均值),如下图所示:

如何才能做到这一点?在每个数据点中也有以误差条显示的标准偏差将是很好的。

提前感谢您的帮助。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-12 19:54:47

最简单的方法是使用tapply()。如果您的data.framedata

代码语言:javascript
复制
means <- with(data, tapply(HR, Status, mean))
plot(means, type="l")

计算和绘制误差条也很容易:

代码语言:javascript
复制
serr <- with(data, tapply(HR, Status, function(x)sd(x)/sqrt(length(x))))
plot(means, type="o", ylim=c(50,80))
sapply(1:length(serr), function(i) lines(rep(i,2), c(means[i]+serr[i], means[i]-serr[i])))
票数 2
EN

Stack Overflow用户

发布于 2013-03-12 19:53:51

你能做的最简单的事情就是先预计算值,然后绘制它们。我会使用ddply进行这种分析:

代码语言:javascript
复制
library(plyr)
res = ddply(df, .(Status), summarise, mn = mean(HR))

并使用ggplot2绘制它:

代码语言:javascript
复制
ggplot(res, aes(x = Status, y = mn)) + geom_line() + geom_point()
票数 2
EN

Stack Overflow用户

发布于 2013-03-12 20:03:08

要使其最接近您想要的内容:

代码语言:javascript
复制
library(ggplot2)
library(plyr)
df.summary <- ddply(df, .(Stimulus, Status), summarise,
                    HR.mean = mean(HR),
                    HR.sd = sd(HR))
ggplot(df.summary, aes(Status, HR.mean)) + geom_path() + geom_point() + 
  geom_errorbar(aes(ymin=HR.mean-HR.sd, ymax=HR.mean+HR.sd), width=0.25) +facet_wrap(~Stimulus) 

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15360380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档