如何聚合而不影响R中的某些列?

时间:2018-03-23 02:00:38

标签: r dataframe aggregate

我试图通过计算数据集中每15行的平均值来压缩我的数据,这样做:

n<-15
aggregate(df[c("columnC", "ColumnD")],list(rep(1:(nrow(df)%/%n+1),each=n,len=nrow(df))),mean)[-1]

这样可行,但问题是我有2个其他列是离散值,显然我不能取离散值的平均值,上面的代码会删除其他列,只有columnC和columnD。我怎么能这样做,以便对于任何离散值,我只取第15行的值?

例如,如果我有这样的数据:

1   Sunday   Evening             16.2  235.84
2   Sunday   Evening             23.4  235.29
3   Sunday   Evening             29.4  232.79
4   Sunday   Evening             24.2  233.89
5   Sunday   Evening             24.2  233.66
6   Sunday   Evening             24.2  233.38
7   Sunday   Evening             24.2  232.99
8   Sunday   Evening             25.4  233.21
9   Sunday   Evening             26.8  232.37
10  Sunday     Night             25.6  231.55
11  Sunday     Night             24.4  231.19
12  Sunday     Night             24.4  231.63
13  Sunday     Night             24.4  231.71
14  Sunday     Night             25.2  231.23
15  Sunday     Night             25.2  231.23

我想采取第三和第四列的平均值,对于第一和第二列,我很高兴&#34;星期日&#34;和&#34;夜晚&#34;因为这些是第15行的值。

1 个答案:

答案 0 :(得分:1)

为了简化,对于您分享的示例,我采用n = 3并以下列方式使用dplyr

library(dplyr)
n <- 3
df %>%
   group_by(group = rep(1:(nrow(df)%/%n+1),each=n,len=nrow(df))) %>%
   summarise(three_mean = mean(V3), 
             four_mean = mean(V4), 
             last_v1 = last(V1), 
             last_v2 = last(V2))


#  group three_mean four_mean last_v1 last_v2
#  <int>      <dbl>     <dbl> <fct>   <fct>  
#1     1       23.0       235 Sunday  Evening
#2     2       24.2       234 Sunday  Evening
#3     3       25.5       233 Sunday  Evening
#4     4       24.8       231 Sunday  Night  
#5     5       24.9       231 Sunday  Night  

这将返回第3列和第4列的每3行的平均值,并获取第1列和第2列的最后一个值。

对于您的真实示例,如果您将n更改为15,这应该有效。