我试图通过计算数据集中每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行的值。
答案 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,这应该有效。