2013-04-10 2 views
0

Я новичок в R и нужно суммировать средние и сд мои данные в новой таблице:Вычислить среднее и с.о. по ID и день в колонке

Необработанные данные выглядят так:

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 

А потом я хочу, чтобы создать barplot с погрешностями, показывающие значение рН на у-achsis и идентификатор на х-achsis с дней в разных цветных полосах.

Надеюсь, кто-то может мне помочь!

+1

Сюжет действительно отдельный вопрос. По крайней мере, попробуйте что-нибудь. google R + barplot. Быть новичком в R означает, что вам нужно немного поработать, чтобы понять, как это работает. Прямо сейчас у этого есть чувство, сделай это для меня. –

ответ

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 
+0

Или 'aggregate (pH ~ ID + Day, dat, function (x) c (mean (x), sd (x))) существует около 100 способов приблизиться к этому. –

+0

@TylerRinker, который не будет работать. Вы не можете использовать несколько функций агрегации в одном вызове функции. Я знаю, что есть много способов сделать это, я просто предлагаю один из способов. Что работает! –

+0

вы можете, если вы передадите ему анонимную функцию, которая объединяет эти два. Просто попробовал, и он работает, хотя и с плохо названными столбцами. 'aggregate (pH ~ ID + Day, dat, function (x) c (среднее значение = среднее (x), sd = sd (x)))' будет лучше. –

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]) 
+0

Спасибо, мне удалось сделать график, используя: barplot (matrix (c (Rtest.dat $ pH.mean), nr = 3), рядом = T, col = c ("черный", "серый", " белый "), main =" pH ", names.arg = c (« Зеленый »,« Желтый »,« Синий »,« Красный »), ylab =« pH ») легенда (« topright », c (" День 1 »,« День 2 »,« День 3 »), cex = 0,6, bty =« n », fill = c (« черный »,« серый »,« белый »)), но я застрял и понятия не имею как добавить бары ошибок?!? Я смотрел онлайн, но не мог понять. Надеюсь, ты поможешь мне! – Simza

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 
+0

Какую версию вы используете? Это все еще не работает для меня? –

+0

Предполагаю, что вы находитесь на R 3.0.0 - Я нашел эту строку в новостях; * aggregate() получает формульный метод благодаря вкладу Арни Магнуссона. Теперь метод фреймов данных позволяет сводным функциям возвращать произвольно многие значения. * Это очень полезно для меня, и сейчас я обновляюсь. –

+0

+1 для использования в одном вызове функции и для меня модернизации R –

0

Спасибо за все ваши комментарии и ответы, это было очень полезно!

И я уже успел сделать график с использованием:

barplot (матрицу (с (Rtest.dat $ pH.mean), пг = 3), у = Т, Col = с ("черный", «серый», «белый»), main = «pH», names.arg = c («зеленый», «желтый», «синий», «красный»), ylab = «pH») легенда («topright», c («День 1», «День 2», «День 3»), cex = 0,6, bty = «n», fill = c («черный», «серый», «белый»))

Я застрял и понятия не имею, как добавить бары ошибок?!? Я смотрел онлайн, но не мог понять. Надеюсь, ты поможешь мне!

Смежные вопросы