我是 R 新手,需要在新表中总结数据的均值和标准差:
原始数据如下所示:
ID Day pH
1 1 7
1 1 7.2
1 1 7.1
2 1 7.3
2 1 7.4
2 1 7.2
3 1 7
3 1 7.1
3 1 7.5
4 1 7.3
4 1 7.2
4 1 7.6
1 2 7
1 2 7.2
1 2 7.1
2 2 7.1
2 2 7.4
2 2 7.2
3 2 7.5
3 2 7.1
3 2 7.5
4 2 7.2
4 2 7.2
4 2 7.3
1 3 7.4
1 3 7.2
1 3 7.1
2 3 7.2
2 3 7.4
2 3 7.2
3 3 7.4
3 3 7.2
3 3 7.5
4 3 7.4
4 3 7.2
4 3 7.7
我想要的表格应该是这样的:
ID Day pHmean pHsd
1 1 7.1 0.10
2 1 7.3 0.10
3 1 7.2 0.26
4 1 7.4 0.21
1 2 7.1 0.10
2 2 7.2 0.15
3 2 7.4 0.23
4 2 7.2 0.06
1 3 7.2 0.15
2 3 7.3 0.12
3 3 7.4 0.15
4 3 7.4 0.25
然后我想创建一个带有误差条的条形图,显示 y-achsis 上的 pH 值和 x-achsis 上的 ID,以及不同颜色条中的日期。
希望有人能帮助我!
作为解决方案发布,因为有一些关于这是否有效的讨论(可能是 R 版本或其他版本):
aggregate(pH~ID+Day, dat, function(x) round(c(mean=mean(x), sd=sd(x)), 2))
## > aggregate(pH~ID+Day, dat, function(x) round(c(mean=mean(x), sd=sd(x)), 2))
## ID Day pH.mean pH.sd
## 1 1 1 7.10 0.10
## 2 2 1 7.30 0.10
## 3 3 1 7.20 0.26
## 4 4 1 7.37 0.21
## 5 1 2 7.10 0.10
## 6 2 2 7.23 0.15
## 7 3 2 7.37 0.23
## 8 4 2 7.23 0.06
## 9 1 3 7.23 0.15
## 10 2 3 7.27 0.12
## 11 3 3 7.37 0.15
## 12 4 3 7.43 0.25
我建议像这样使用
aggregate
函数...
pHmean <- aggregate( pH ~ Day + ID , data = dat , FUN = mean )[,3]
dat <- cbind( aggregate( pH ~ Day + ID , data = dat , FUN = sd ) , pHmean )
dat
Day ID pH pHmean
1 1 1 0.10000000 7.100000
2 2 1 0.10000000 7.100000
3 3 1 0.15275252 7.233333
4 1 2 0.10000000 7.300000
5 2 2 0.15275252 7.233333
6 3 2 0.11547005 7.266667
7 1 3 0.26457513 7.200000
8 2 3 0.23094011 7.366667
9 3 3 0.15275252 7.366667
10 1 4 0.20816660 7.366667
11 2 4 0.05773503 7.233333
12 3 4 NA 7.400000
对于这些值,您可以使用 plyr 包:
x
ID Day pH
1 1 7
1 1 7.2
1 1 7.1
2 1 7.3
2 1 7.4
2 1 7.2
3 1 7
3 1 7.1
3 1 7.5
4 1 7.3
4 1 7.2
4 1 7.6
1 2 7
1 2 7.2
1 2 7.1
2 2 7.1
2 2 7.4
2 2 7.2
3 2 7.5
3 2 7.1
3 2 7.5
4 2 7.2
4 2 7.2
4 2 7.3
1 3 7.4
1 3 7.2
1 3 7.1
2 3 7.2
2 3 7.4
2 3 7.2
3 3 7.4
3 3 7.2
3 3 7.5
4 3 7.4
4 3 7.2
4 3 7.7
require(plyr)
d1 <- ddply(x, .(ID, Day), summarize, phMean=mean(pH), pHsd=sd(pH))
d2 <- reshape(d1, v.names=c("phMean", "pHsd"), idvar="ID", timevar="Day",direction="wide")
rownames(d2) <- d2[,1]
d2 <- t(d2[,-1])
require(gplots)
barplot2(d2[(1:nrow(d2))%%2>0.5,], beside=T, plot.ci=T,
ci.l=d2[(1:nrow(d2))%%2>0.5,]-d2[(1:nrow(d2))%%2<0.5,],
ci.u=d2[(1:nrow(d2))%%2>0.5,]+d2[(1:nrow(d2))%%2<0.5])
感谢您的所有评论和回答,非常有用!!
我已经成功地使用以下方法制作了图表:
barplot(matrix(c(Rtest.dat$pH.mean),nr=3), beside=T, col=c("black","grey","white"), main="pH", names.arg=c("Green", "Yellow", "Blue", "Red"), ylab="pH") legend("topright", c("Day 1","Day 2","Day 3"), cex=0.6, bty="n", fill=c("black","grey","white"))