2015-07-20 98 views
1

這是我的數據。它顯示了我在三個不同地點發現的魚量。在計算描述性統計信息時在各種變量中使用ddply

Selidor.Bay Enlades.Bay Cumphrey.Bay 
1  39   29  187 
2  70  370   50 
3  13   44   52 
4  0   65   20 
5  43  110  220 
6  0   30  266 

我想要做的是創建一個腳本來計算每個站點的基本統計數據。

如果我通過堆疊重新排列數據。即:

values site 
1 29 Selidor.Bay 
2 370 Selidor.Bay 
3 44 Selidor.Bay 
4 65 Enlades.Bay 

我能使用以下命令:

data <- ddply(df, c("site"), summarise, 
       N = length(values), 
       mean = mean(values), 
       sd = sd(values), 
       se = sd/sqrt(N), 
       sum = sum(values) 
) 
data. 

我的問題是我怎麼可以使用腳本,而不必堆放我的數據幀?

謝謝。

+1

試試'library(dplyr); summarise_each(df,funs(N = n(),mean,sd,sum))' –

+0

如docendo的評論所示,如果你願意離開'ddply'(在標題中提到),這會更簡單。 – Frank

回答

2

上@docendodiscimus'評論細微變化:

library(reshape2) 
library(dplyr) 

DF %>% 
    melt(variable.name="site") %>% 
    group_by(site) %>% 
    summarise_each(funs(n(), mean, sd, se=sd(.)/sqrt(n()), sum), value) 

#   site n mean  sd  se sum 
# 1 Selidor.Bay 6 27.5 27.93385 11.40395 165 
# 2 Enlades.Bay 6 108.0 131.84688 53.82626 648 
# 3 Cumphrey.Bay 6 132.5 104.29909 42.57992 795 

melt做什麼的OP被稱爲 「堆疊」 的data.frame。 tidyr包中可能有一些類似的功能。