分别从列,行和观察中扫出colMeans,rowMeans和mean,我使用以下代码:
a <- matrix(data=seq(from=2, to=60, by=2), nrow=6, ncol=5, byrow=FALSE)
b <- matrix(data=rep(colMeans(a), nrow(a)), nrow=nrow(a), ncol=ncol(a), byrow=TRUE)
c <- matrix(data=rep(rowMeans(a), ncol(a)), nrow=nrow(a), ncol=ncol(a), byrow=FALSE)
d <- matrix(data=rep(mean(a), nrow(a)*ncol(a)), nrow=nrow(a), ncol=ncol(a), byrow=FALSE)
e <- a-b-c-d
可以使用此命令扫描colMeans
a1 <- sweep(a, 2, colMeans(a), "-")
是否有任何单一命令可以清除colMeans,rowMeans和意思?提前谢谢。
答案 0 :(得分:2)
在这个例子中,您认为e
应该是什么样子?也许您的行应为e <- a-b-c+d
,以便e
具有零均值。
以下代码使用b
,c
和d
生成与计算相同的结果(使用算术级数示例,矩阵为0)。如果你坚持,请将+
更改为-
。
e <- t(t(a) - colMeans(a)) - rowMeans(a) + mean(a)
答案 1 :(得分:1)
不是我知道的,但为什么不写自己的呢?它只有四行:
meanSweep <- function(x){
tmp <- sweep(x,2,colMeans(x),"-")
tmp <- sweep(tmp,1,rowMeans(x),"-")
tmp <- tmp - mean(x)
tmp
}
all.equal(e,meanSweep(a))
[1] TRUE