2017-04-05 179 views
0

繪製平均值有一個數據幀d找類同此:如何與標準偏差

Temp  A  B 
    14  10  14 
    14  11  13 
    14  12  15 
    14  14  18 
    16  18  17 
    16  20  17 
    16  22  18 
    16  22  17 
    18  25  25 
    18  26  27 
    18  28  26 
    18  26  28 

總有一款適合每個溫度步相同數量的值。

我想要做的是:繪製每個溫度步的A和B的平均值和標準偏差。是否可以在不劃分數據框的情況下這樣做? 非常感謝!

+2

你嘗試過什麼嗎? – mtoto

+0

這給出了每個溫度A和B的平均值/ sd:'aggregate(。〜Temp,df,function(x)c(M = mean(x),SD = sd(x)))',你想陰謀或如何 – timfaber

回答

1

GGplot傾向於希望您將數據以較長的形式存在於所需的聚合級別。因此,我會首先將它融合,以便將數值放在一列中,然後使用data.table的語法創建一個包含平均值和標準偏差的彙總數據集,然後對該彙總進行融合,然後分別繪製平均溫度和標準偏差。

meltedTable = melt(table, id.vars = c("temp")) 
summaryTemps = meltedTable[,list(Mean = mean(value), StandardDeviation = sd(value)), by = list(temp, variable)] 
meanTemperatures = ggplot(summaryTemps) + geom_line(aes(x = summaryTemps$temp, y = summaryTemps$Mean, colour = summaryTemps$variable)) 
sdTemperatures = ggplot(summaryTemps) + geom_line(aes(x = summaryTemps$temp, y = summaryTemps$StandardDeviation, colour = summaryTemps$variable)) 
0

你可以找到其他的方式也, 試試下面的代碼:

df<-split(df,df$Temp) 

df<-lapply(df,function(x){ 
    A.mean<-mean(x[,1]) 
    A.sd<-sd(x[,1]) 
    B.mean<-mean(x[,2]) 
    B.sd<-sd(x[,2]) 
    x<-rbind(A.mean,A.sd,B.mean,B.sd) 
    x 
} 
) 

df<-do.call("rbind",df) 

df<-as.data.frame(df) 
df$Variable<-rownames(df) 

df$Count<-rep(1:(nrow(df))/4,each=4) 
rownames(df)<-NULL 

ggplot(df,aes(Count,V1))+geom_line+facet_wrap(~Variable,scales="free",ncol=2)