计算数据框中每15行的平均值,最小值和最大值

时间:2018-04-22 17:55:09

标签: r max each mean min

我有一个77列和1080行df的数据框 我想减少我的数据所以,我想要每一列:找到每15行的最小值,最大值和平均值。 例如,对于第1列,我希望每15行找到第二列的最小值,最大值,平均值,以及所有77列的相同和依次,并将所有这些列放入数据帧。我该怎么做? 谢谢

2 个答案:

答案 0 :(得分:4)

我们可以使用gl创建分组变量,然后使用summarise_all

应用这些函数
library(dplyr)
df %>% 
   group_by(group = as.integer(gl(n(), 15, n()))) %>% 
   summarise_all(funs(min, max, mean))

数据

set.seed(24)
df <- as.data.frame(matrix(sample(1:9, 35 * 10, replace = TRUE), nrow = 35))

答案 1 :(得分:1)

使用基础R并应用函数:

# dummy data from akrun
df1 <- data.frame(matrix(rnorm(77*1080, 0, 1), ncol = 77))

# Vectors with means, mins, and maxes for each row
means <- apply(df1, 1, mean)
mins  <- apply(df1, 1, min)
maxs  <- apply(df1, 1, max)

# Make to a data frame
df2 <- data.frame(means[seq(1, 1080, 15)], mins[seq(1, 1080, 15)], maxs[seq(1, 1080, 15)])

或者不创建其他对象(向量表示,分钟和最大值)直接进入数据框:

df2 <- data.frame("Mean" = apply(df1, 1, mean)[seq(1, 1080, 15)], "Min" = apply(df1, 1, min)[seq(1, 1080, 15)], "Max" = apply(df1, 1, max)[seq(1, 1080, 15)])

为减少计算时间,首先减少数据帧:

df1 <- df1[seq(1, 1080, 15),]
df2 <- data.frame("Mean" = apply(df1, 1, mean), "Min" = apply(df1, 1, min), "Max" = apply(df1, 1, max))