计算R中的最小值,最大值和平均值

时间:2016-04-14 06:07:53

标签: r

我的数据集包含130行和2列。 我想使用R计算秒列的每5行的平均值,最小值和最大值。使用colMeans和以下命令 rep(colMeans(matrix(data$Pb, nrow=5), na.rm=TRUE), each=5)我能够计算每5行的平均值。但是我无法计算max和min,因为没有内置函数。我按照建议here尝试了5行而不是2行。但是我收到错误dim(X) must have a positive length.有人可以帮我理解我应该怎样做才能修复和计算上述数量?我的最终目标是每5行绘制最小值,平均值,最大值。

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果我们正在寻找功能,可以从max找到minmatrixcolMaxs各列的colMinsmatrixStats可以使用。

library(matrixStats)
colMaxs(mat)
#[1]  7  8 20

colMins(mat)
#[1] 3 1 7

但是,如果要查找每5行数据集列,请使用gl为每5行创建分组索引,然后在by的帮助下获取{{ 1}}或colMaxscolMins

colMeans

同样,我们可以找到by(data, list(gr=as.numeric(gl(nrow(data), 5, nrow(data)))), FUN = function(x) colMaxs(as.matrix(x))) colMins

colMeans

上述内容可以通过by(data, list(gr=as.numeric(gl(nrow(data), 5, nrow(data)))), FUN = function(x) colMins(as.matrix(x))) by(data, list(gr=as.numeric(gl(nrow(data), 5, nrow(data)))), FUN = function(x) colMeans(as.matrix(x)))

以紧凑的方式完成
dplyr

要执行 library(dplyr) data %>% group_by(gr = as.numeric(gl(nrow(.), 5, nrow(.)))) %>% summarise_each(funs(min, max, mean)) ,我们可以使用plot

进行扩展
ggplot

数据

library(ggplot2)
library(tidyr)
data %>% 
    group_by(gr = as.numeric(gl(nrow(.), 5, nrow(.)))) %>%
    summarise_each(funs(min, max, mean)) %>%
    gather(Var, Val, -gr) %>% 
    separate(Var, into = c("Var1", "Var2")) %>%
    ggplot(., aes(x=factor(gr), y=Val, fill=Var2)) + 
           geom_bar(stat="identity")+
           facet_wrap(~Var1)

答案 1 :(得分:1)

一个很好的功能是基础by功能与apply相结合。下面是一个示例,您首先为函数创建组的索引:

m <- matrix(runif(130*2),130,2)
group <- rep(seq(nrow(m)), each=5, length.out=nrow(m))
res <- by(m, INDICES = group, FUN = function(x){apply(x, MARGIN=2, FUN=max)})
class(res) # "by" class
do.call(rbind, res) # matrix