Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r中带约束的对角和_R_Matrix_Calculated Columns_Diagonal - Fatal编程技术网

r中带约束的对角和

r中带约束的对角和,r,matrix,calculated-columns,diagonal,R,Matrix,Calculated Columns,Diagonal,我想提取具有两个约束的单元格 首先,提取数据[i,j+@],如果sum(数据[i,j+@])可能是一个while循环,但是您得到的想法非常感谢您的答案,但是,使用我的真实数据,它有一些错误。那么,你能再检查一次吗??!我重新上传了数据。谢谢。已编辑,请尝试再次运行。再次编辑*现在您可以运行该函数,您还可以使用sum.increment.Holly、、、、更改您的求和约束,我真的感谢您!!它工作得很好!!再次感谢你。祝你有美好的一天! X1 X2 X3 X4 X5 X6 X7 X8

我想提取具有两个约束的单元格


首先,提取数据[i,j+@],如果sum(数据[i,j+@])可能是一个while循环,但是您得到的想法非常感谢您的答案,但是,使用我的真实数据,它有一些错误。那么,你能再检查一次吗??!我重新上传了数据。谢谢。已编辑,请尝试再次运行。再次编辑*现在您可以运行该函数,您还可以使用sum.increment.Holly、、、、更改您的求和约束,我真的感谢您!!它工作得很好!!再次感谢你。祝你有美好的一天!
X1  X2  X3  X4  X5  X6  X7  X8  X9
5   1.847652137 1.593196753 1.038744382 2.392577214 1.929800297 2.00485602  1.365284847 2.071210757 0.961210097
10  1.844405755 1.796177057 1.000318509 2.236319316 1.993847864 2.06124419  1.334352788 2.136264508 1.187134575
15  1.840050479 1.917357779 1.017851743 2.212746581 2.092042634 1.94601942  1.320106097 2.029994348 1.214182727
20  1.909398459 1.737023355 0.998872288 2.199635485 2.112443388 1.945944311 1.264014072 2.101753344 1.221846304
25  1.835888833 1.500481202 0.977172242 2.252597257 1.9836639   1.981422844 1.312695726 2.059200235 1.186026763
30  1.864937958 1.702083702 0.824693691 2.34185367  2.005003283 2.042903214 1.329264708 2.093476876 1.200883904
35  1.860653591 1.797731242 0.950537406 2.245353372 1.994555492 1.825519322 1.355424824 2.156744119 1.175993981
40  1.884274248 1.635847889 1.169642735 2.269898328 1.975265537 1.553298242 1.615854357 2.05323242  1.098031592
45  1.886826057 1.811210946 1.061251733 2.280645314 1.988672647 1.557977089 1.66754175  2.044207552 1.0112728
50  1.831184163 1.894325674 0.840784273 2.271033072 1.939068714 1.637609662 1.661725542 2.014112901 0.921453048
55  1.814208298 1.506889498 0.882503502 2.2606704   1.867075707 1.606874174 1.70215241  2.082384915 0.94171228
60  1.840268898 1.540609758 0.984783168 2.245115137 1.845533017 1.584807408 1.635959069 2.064869319 0.950706804
65  1.83516395  1.373207762 0.822749722 2.241155251 1.900521615 1.564088673 1.604834287 2.041777787 0.954724586
70  1.815817966 1.844931506 1.019619889 2.33141441  1.86220601  1.551023075 1.601418379 2.002273876 0.957165881
75  1.853140166 7.098379135 1.182675991 2.322268357 1.813515351 1.615939602 1.696614356 2.035073751 0.958010381
80  1.798210945 2.222645814 0.969712319 2.240342429 1.913167003 1.668853612 1.697958527 2.093574065 0.957251029
85  1.800217051 6.402182459 0.860639426 2.246098499 1.907598223 1.682098292 1.745796169 2.121305706 0.954894171
90  1.803848201 1.837969653 1.102897318 2.129789813 2.043044807 1.735093642 1.666707881 2.129939238 0.950959419
95  1.773136099 1.81561362  1.063019374 2.101027448 2.068051192 1.741234984 1.560080567 2.035059171 0.945479261
100 1.726054688 2.336579799 1.191580262 2.171114687 2.000358256 1.941099801 1.344295317 2.148571187 0.938498408
105 1.732335377 1.525364359 0.997056804 2.22337609  1.992471357 1.947338911 1.29520691  2.118027771 0.924464116
110 1.712195122 2.147877272 1.236796081 2.19147367  1.98315409  1.971128342 1.406685721 2.150012062 0.894661016
115 1.850123948 1.655380701 1.182880578 2.193327785 1.89713277  1.98215189  1.291643391 2.11847296  1.056295377
    x1      x2      x3      x4      x5      x6      x7      x8      x9  
1   1.847652137 1.593196753 1.038744382 2.392577214 1.993847864 2.06124419 1.320106097  2.029994348 1.214182727
# read in data
dat <- structure(list(x1 = c(2, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1), 
                      x2 = c(2, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1), 
                      x3 = c(1.1, 1.1, 3, 1.1, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2), 
                      x4 = c(2.4, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.6, 2.6, 2.6, 2.6, 2.6), 
                      x5 = c(2, 2.1, 2.2, 2.1, 2.1, 2.1, 2.2, 2.2, 2.2, 2.2, 2.2, 2.2), 
                      x6 = c(2.1, 2.2, 2.2, 2.3, 2.3, 2.3, 2.3, 2.3, 2.3, 2.3, 2.3, 2.4), 
                      x7 = c(1.4, 1.4, 1.4, 1.4, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5), 
                      x8 = c(2.2, 2.2, 2.2, 2.2, 2.2, 2.2, 2.2, 2.3, 2.3, 2.3, 2.3, 2.3), 
                      x9 = c(1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.4, 1.4, 1.4)), 
                 .Names = c("x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9"), 
                 class = "data.frame", 
                 row.names=c("5","10","15","20","25","30","35","40","45","50","55","60"))
# number of desired result rows
iterate = 3
# empty matrix to fill
RESULT <- matrix(NA, nrow = iterate, ncol = ncol(dat))
extract <- function(dat, iterate = 3, sum.increment = 5){
  dat <- as.matrix(dat)
  n <- nrow(dat)
  p <- ncol(dat)
  RESULT <- matrix(NA, nrow = iterate, ncol = p)
  for(k in 1:iterate){
    x <- 1  
    for(i in k:n){
      if(x == 1){
        hit <- which(cumsum(dat[i,]) > sum.increment)[1]
      } else {
        hit <- which(cumsum( # 
          c(RESULT[k,c(1:ifelse(hit>p,p,hit))], # keep track of previous values
            dat[i,-c(1:(x-1))]) # to cumulatively sum with new values
        ) > sum.increment * which(i == k:n))[1]
      }

      hit <- ifelse(is.na(hit) | hit > p, p, hit) # end of the matrix
      RESULT[k,c(x:hit)] <- unlist(dat[i,c(x:hit)])
      if(hit == p) break # if we're at the end of the cols, start the next iteration
      x <- hit + 1
    }
  }
  if(!is.null(colnames(dat))) colnames(RESULT) <- colnames(dat)
  return(RESULT)
}
extract(dat, iterate = 3, sum.increment = 5)
RESULT
#      x1  x2  x3  x4  x5  x6  x7  x8  x9
#[1,] 2.0 2.0 1.1 2.5 2.1 2.2 1.4 2.2 1.3
#[2,] 2.1 2.1 1.1 2.5 2.2 2.2 1.4 2.2 1.3
#[3,] 2.1 2.1 3.0 2.5 2.1 2.3 1.5 2.2 1.3