我是R的新手,需要在新表中汇总我的数据的均值和sd:
原始数据看起来像这样:
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以及不同颜色条中的天数。
希望有人可以帮助我!
答案 0 :(得分:2)
作为解决方案发布,因为有一些讨论是否有效(可能是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
答案 1 :(得分:1)
我建议使用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
答案 2 :(得分:0)
对于值,您可以使用包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])
答案 3 :(得分:0)
感谢您的所有评论和答案,这非常有用!!
我已经设法使用以下方式制作图表:
barplot(矩阵(c(Rtest.dat $ pH.mean),nr = 3),旁边= T,col = c(“黑色”,“灰色”,“白色”),主要=“pH”, names.arg = c(“绿色”,“黄色”,“蓝色”,“红色”),ylab =“pH”)图例(“topright”,c(“第1天”,“第2天”,“第3天) “),cex = 0.6,bty =”n“,fill = c(”黑色“,”灰色“,”白色“))
但我卡住了,不知道如何添加错误栏?!?我在网上看,但无法弄清楚。希望你能帮助我!!