我在R中有一个很大的数据帧,格式如下:
"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”值)并绘制它:
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列的平均值),如下图所示:

如何才能做到这一点?在每个数据点中也有以误差条显示的标准偏差将是很好的。
提前感谢您的帮助。
发布于 2013-03-12 19:54:47
最简单的方法是使用tapply()。如果您的data.frame是data
means <- with(data, tapply(HR, Status, mean))
plot(means, type="l")计算和绘制误差条也很容易:
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])))发布于 2013-03-12 19:53:51
你能做的最简单的事情就是先预计算值,然后绘制它们。我会使用ddply进行这种分析:
library(plyr)
res = ddply(df, .(Status), summarise, mn = mean(HR))并使用ggplot2绘制它:
ggplot(res, aes(x = Status, y = mn)) + geom_line() + geom_point()发布于 2013-03-12 20:03:08
要使其最接近您想要的内容:
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)

https://stackoverflow.com/questions/15360380
复制相似问题