2017-05-10 84 views
0

我在r中使用聚合函數在不同的時間點R:聚合函數的製作地塊

aggregate(.~ Group + Time, data = x, FUN = function(x) c(m = mean(x), n = sd(x))) 

我有一個問題來計算不同組的平均值和標準差,這也讓我的平均值和標準差對於數據的ID,所以我的結果是這樣的:

# Time Group ID.m ID.n result.m result.n 
# 1 0 x  20.5 10.0  6.5 1.15 
# 2 1 x  20.5 10.0  8.0 2.13 
# 3 0 y  20.5 10.0  7.0 2.66 
... 

如何刪除爲ID的均值和標準差的,也是我想提出均值的情節和平均值±SD爲每個組在不同的時間(時間x軸),我該怎麼做?

+1

通常它看起來像'骨料(〜CYL,mtcars,函數(X){C(平均=平均(x)中,SD =標準差(X)) })',但在某些時候,這是限制在驅動人們dplyr或data.table。 – alistaire

+0

如何刪除結果ID?@alistaire – Cindy

+0

請勿將其包含在公式的左側?很難說沒有看到原始數據,你應該添加[讓您的示例可重現](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example# 5963610)。 – alistaire

回答

1

考慮使用tidyr包。它包含在加載tidyverse庫時。 group_by和summarize函數替代您的聚合函數。在我看來,管功能(%>%)更容易閱讀:

# Libraries 
library(tidyverse) 

result_table <- mydata %>%  # Specify your table 
    group_by(Group, Time) %>%  # Specify your groups (two variables in your case) 
    summarize(m = mean(x),   # Calculate mean for your groups 
      n = sd(x))   # Calcualte sd for your groups 

如果你想要做的是從你的結果刪除列:

result_table %>% select(Time, Group, result.n, result.m) # using tidyr or 
result_table[,c('Time', 'Group', 'result.n', 'result.m')] # Base R 

爲了使您的情節,你可以使用ggplot2,其也包括在tidyverse

ggplot(data = result_table) + 
    geom_line(aes(time,m)) + 
    geom_line(aes(time,n))