R应用具有动态标准的功能

时间:2017-11-05 16:05:48

标签: r apply

我在尝试使用&#34;申请&#34;时有疑问到矩阵而不是循环来提​​高效率。但问题是每个单一输出都将基于其他单元格的结果。如果我在excel表中解释。对于细胞D6,如果黄细胞的总和< 5(固定数)和蓝色单元的总和&lt; 4(第一列值),分配该单元格值1.最后,4的值将分布在4 x&#34; 1&#34; s的行中。 (见附图)

尝试了一些R代码: dat <- as.data.frame(matrix(, nrow = 6, ncol = 5))
dat[,1]=c(2,3,4,3,4,5) apply(dat[,2:5], 1:2, function(x){ifelse([...],1,0) })

不确定如何在支架部分编码.. 最终,想要用所有输出替换dat中的值。真的很感激!!

enter image description here

1 个答案:

答案 0 :(得分:0)

如果想法是在更新一个单元格后,后续计算会使用新更新的单元格,那么您确实需要一个双循环,而不是apply

请注意,以下答案中的最后一行与问题中显示的答案不同。我假设这代表了问题中显示的答案中的错误。如果没有,请澄清规则。

dat <- matrix(0, nrow = 6, ncol = 5)
dat[,1] <- c(2,3,4,3,4,5)

for(j in 2:ncol(dat)) 
   for(i in 1:nrow(dat))
      dat[i,j] <- ( sum(dat[1:i, j]) - dat[i, j] < 5 ) * 
                  ( sum(dat[i, 2:j]) - dat[i, j] < dat[i, 1] )
dat

,并提供:

     [,1] [,2] [,3] [,4] [,5]
[1,]    2    1    1    0    0
[2,]    3    1    1    1    0
[3,]    4    1    1    1    1
[4,]    3    1    1    1    0
[5,]    4    1    1    1    1
[6,]    5    0    0    1    1