R -Finding意味着多个子集

时间:2018-02-09 03:40:31

标签: r dataframe mean

我有一个包含4列的数据集,如下所示。我想创建第5列(平均值),它具有基于前3列的第4列的平均值。

例如:Id(5000)日期(1/1/2018)的第一个小时(小时= 1)的值的平均值是前3行(2 + 2 + 1)的平均值/ 3 = 1.67

>

  

头(read_df [,1:5])

`

 Id   Date         Hour         Value   Mean
5000    1/1/2018    1             1      1.67
5000    1/1/2018    1             2      1.67
5000    1/1/2018    1             2      1.67
5100    1/1/2018    4             2       2
5100    2/1/2018    6             2       3
5100    2/1/2018    6             4       3
5100    3/1/2018    2             7       7
5200    3/1/2018    3             3      4.5
5200    3/1/2018    3             6      4.5

我尝试为Id和日期和小时使用for循环。但最终在某些行中使用了NA。请告诉我一个实现这一目标的有效方法。

2 个答案:

答案 0 :(得分:3)

我建议使用dplyr包。

library(dplyr)

read_df %>% 
    group_by(ID, Date) %>%          # Specifly your by-variables
    mutate(Mean = mean(Value)) %>%  # Calculate the mean
    ungroup()

答案 1 :(得分:1)

来自ddply

plyr任何函数执行此操作。

plyr::ddply(read_df, c("Id", "Date", "Hour"), numcolwise(mean))

虽然在你的例子中我注意到第3行有不同的日期,所以这与你的例子相矛盾。

有更简单的功能可以做类似的事情,例如aggregate,但我喜欢ddply,因为它是一个很好的全能者。

相关问题