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