我的数据集包含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行绘制最小值,平均值,最大值。
提前致谢。
答案 0 :(得分:1)
如果我们正在寻找功能,可以从max
找到min
,matrix
和colMaxs
各列的colMins
和matrixStats
可以使用。
library(matrixStats)
colMaxs(mat)
#[1] 7 8 20
colMins(mat)
#[1] 3 1 7
但是,如果要查找每5行数据集列,请使用gl
为每5行创建分组索引,然后在by
的帮助下获取{{ 1}}或colMaxs
或colMins
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