R:计算数据帧每列中正值的平均值

R:计算数据帧每列中正值的平均值,r,R,我想计算日期框中每一列的平均值。但只应考虑正值。每列的正平均值汇总在一个向量中 我的代码: x <- data.frame(replicate(3, sample(-5000:7000, 1000, rep = TRUE))) meanxpositive <- c(NA) for (n_col in 1:3) { z <- mean(x[which(x[, ncol] > 0)]) meanxpositive[n_col] <- z }

我想计算日期框中每一列的平均值。但只应考虑正值。每列的正平均值汇总在一个向量中

我的代码:

x <- data.frame(replicate(3, sample(-5000:7000, 1000, rep = TRUE)))

meanxpositive <- c(NA)

for (n_col in 1:3) {     
    z <- mean(x[which(x[, ncol] > 0)])
    meanxpositive[n_col] <- z
}
这个代码不起作用。也许有人有更好的主意。

colMeans方法可能看起来像:

sapply(x, function (y) mean(y[y > 0]))

colMeans(as.matrix(x) * (x > 0))
x[x<=0] <- NA
colMeans(x, na.rm=T)

#      X1       X2       X3 
#3483.664 3626.115 3533.687 
注:我将对ncol的引用更改为n_col,并在您的平均值中加入了一个具体的n_col选择。。。以前,您没有选择任何列

最后,对于for循环,最好预先分配结果的内存。在本例中,这意味着将其设置为您知道应该为3的大小。在R中,循环内对象的增长非常缓慢且效率低下

数据:

colMeans方法可能类似于:

x[x<=0] <- NA
colMeans(x, na.rm=T)

#      X1       X2       X3 
#3483.664 3626.115 3533.687 
注:我将对ncol的引用更改为n_col,并在您的平均值中加入了一个具体的n_col选择。。。以前,您没有选择任何列

最后,对于for循环,最好预先分配结果的内存。在本例中,这意味着将其设置为您知道应该为3的大小。在R中,循环内对象的增长非常缓慢且效率低下

数据:


如果要将数据保存在data.frame中

图书馆弹琴 第47集 x%汇总所有~mean.x[.x>0] >x1x2x3 > 1 3578.912 3535.614 3358.444 或者用老的funs符号

x%>%总结了所有的经验。[.>0] >x1x2x3 > 1 3578.912 3535.614 3358.444 或者在R底

合计~TRUE,x,functionx{meanx[x>0]} >x1x2x3 > 1 3578.912 3535.614 3358.444 或data.table

图书馆数据表 setDTx[,lapply.SD,functionx{meanx[x>0]}] >x1x2x3 > 1: 3578.912 3535.614 3358.444
如果要将数据保存在data.frame中

图书馆弹琴 第47集 x%汇总所有~mean.x[.x>0] >x1x2x3 > 1 3578.912 3535.614 3358.444 或者用老的funs符号

x%>%总结了所有的经验。[.>0] >x1x2x3 > 1 3578.912 3535.614 3358.444 或者在R底

合计~TRUE,x,functionx{meanx[x>0]} >x1x2x3 > 1 3578.912 3535.614 3358.444 或data.table

图书馆数据表 setDTx[,lapply.SD,functionx{meanx[x>0]}] >x1x2x3 > 1: 3578.912 3535.614 3358.444
赛普利克斯,我的意思是耶稣,那太快了。但也有可能在一个循环内完成吗?赛普利克斯,功能性的意思是,耶稣,那太快了。但是也有可能在循环内执行吗?colmeansa.matrixx*x>0除以行总数。是的,我太快了。colmeansa.matrixx*x>0除以行总数。是的,我太快了
set.seed(1)
x<-data.frame(replicate(3,sample(-5000:7000,1000,rep=TRUE)))