(我第一次在这里发布!经历了整个论坛,但找不到任何解决方案)
我正在尝试遍历一个数据框(矩阵[846:19]),并确定与均值相距3 stDev的对象。
我已经确定了这些值:
r <- (mapply(v, FUN = sd)*3 + mapply(v, FUN = mean))
但是,当我尝试遍历df(名为“ v”)时
for (i in c(1:19)){
for (j in c(1:19)){
out[i] <- which(v[[j]]> r[j])
}
}
我得到了错误
Error in out[i] <- which(v[[j]] > r[j]) : replacement has length zero
旁注:当我手动执行(即)
which(v$Rad.Ra>r[5])
有效! :o
非常感谢您的帮助! :)
答案 0 :(得分:0)
您不需要for
循环即可完成问题中的描述。
我将使用colMeans
获取列均值,并使用apply
获取标准错误。随后的大多数代码都是矢量化的R解决问题的方式。
第一个数据集示例,因为您尚未发布。
set.seed(3623)
v <- matrix(rnorm(846*19), ncol = 19)
现在是问题。
r <- colMeans(v) + apply(v, 2, sd)*3
w <- which(t(apply(v, 1, `>`, r)), arr.ind = TRUE)
如果您想要一个矩阵,其中行和列的值大于3个标准误差,则矩阵w
将保留这些值。
head(w)
# row col
#[1,] 647 1
#[2,] 124 4
#[3,] 523 4
#[4,] 631 4
#[5,] 775 5
#[6,] 607 6
如果要只列出行号的列表,请按行split
按矩阵。
split(w[, 1], w[, 2])