迭代R中的数据帧

时间:2018-10-11 11:26:55

标签: r dataframe

(我第一次在这里发布!经历了整个论坛,但找不到任何解决方案)

我正在尝试遍历一个数据框(矩阵[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

非常感谢您的帮助! :)

1 个答案:

答案 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])