R If-Else排序条件
在涉及向量之前,我问了一个类似的问题,并尝试将其应用到矩阵中,如中所示 以下是我正在使用的代码:R If-Else排序条件,r,if-statement,matrix,R,If Statement,Matrix,在涉及向量之前,我问了一个类似的问题,并尝试将其应用到矩阵中,如中所示 以下是我正在使用的代码: y <- c(0,5,10,0) n <- 9 R <- t(c(2.05, 2.05, 2.05, 2.55, 2.55, 2.55, 2.95, 2.95, 2.95)) R <- (replicate(4,R)) R <- (matrix(R, nrow=4)) R <- t(apply(R,1,sort)) mat <- t(sapply(y,
y <- c(0,5,10,0)
n <- 9
R <- t(c(2.05, 2.05, 2.05, 2.55, 2.55, 2.55, 2.95, 2.95, 2.95))
R <- (replicate(4,R))
R <- (matrix(R, nrow=4))
R <- t(apply(R,1,sort))
mat <- t(sapply(y, function(test) pmax(seq(test, (test-n+1), -1), 0) ))
mat
P <- replicate(ncol(R),(c(6447.88,6447.88,6447.88,5000)))
EnvTest <- new.env()
EnvTest$Orig <- c(548453.5,548453.5,548453.5,500000)
FuncTest2 <- function(pp) {
EnvTest$Orig <- ifelse(R[,pp]==0|mat[,pp]!=0,EnvTest$Orig,EnvTest$Orig-(P[,pp]-EnvTest$Orig*R[,pp]/1200));
return(EnvTest$Orig);
};
Test2 <- rbind(EnvTest$Orig,do.call(rbind,lapply(1:9,FuncTest2)));
x2 <- t(Test2);
x2;
这太长了,因为所需的输出是一个4 x 5的矩阵,它有4倍的列数。在我之前提出的问题中,哪一个是类似的,是关于向量的,这就是为什么我认为我的代码不起作用的原因。
所需输出为:
[,1] [,2] [,3] [,4] [,5]
[1,] 548453.5 537422.2 526574.8 515905.7 505533.7
[2,] 548453.5 548453.5 548453.5 538058.5 527795.6
[3,] 548453.5 548453.5 548453.5 548453.5 548453.5
[4,] 500000.0 491701.3 483577.3 475624.0 467953.1
感谢您的帮助
更新
我开始想,也许这样做的方法是在创建变量“Test2”时更改一些代码。不确定如何改变,但这是一个想法 @akrun很抱歉编辑了它。是的,我想我已经弄明白了。。。我没有t@akrun尝试使用索引和rbind进行此操作,它生成正确的数字,但行的顺序错误。我认为您的条件不正确。根据预期的输出,您选择了1、3、5、7和9列。@akrun我认为这不是真的。根据我创建的条件,所有内容都是混乱的。y中有4个值,即0、5、10、0。您正在使用
sapply
和if-else条件循环它。i、 e.如果值为0,则得到x2的1、3、5、7、9列,如果不是,则得到2、4、6、8、10列。因此,当我们循环y值时,这会重复4次。@akrun很抱歉编辑了它。是的,我想我已经弄明白了。。。我没有t@akrun尝试使用索引和rbind进行此操作,它生成正确的数字,但行的顺序错误。我认为您的条件不正确。根据预期的输出,您选择了1、3、5、7和9列。@akrun我认为这不是真的。根据我创建的条件,所有内容都是混乱的。y中有4个值,即0、5、10、0。您正在使用sapply
和if-else条件循环它。i、 e.如果值为0,则得到x2的1、3、5、7、9列,如果不是,则得到2、4、6、8、10列。因此,当我们循环通过y值时,这会重复4次。
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,] 548453.5 548453.5 548453.5 500000.0 537422.2 548453.5 548453.5 491701.3 526574.8 548453.5 548453.5 483577.3
[2,] 542942.6 548453.5 548453.5 495854.2 531892.4 548453.5 548453.5 487541.2 521245.9 548453.5 548453.5 479604.9
[3,] 542942.6 548453.5 548453.5 495854.2 531892.4 548453.5 548453.5 487541.2 521245.9 548453.5 548453.5 479604.9
[4,] 548453.5 548453.5 548453.5 500000.0 537422.2 548453.5 548453.5 491701.3 526574.8 548453.5 548453.5 483577.3
[,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20]
[1,] 515905.7 543171.1 548453.5 475624.0 505533.7 532933.3 548453.5 467953.1
[2,] 510726.1 538058.5 548453.5 471793.3 500328.6 527795.6 548453.5 464103.5
[3,] 510726.1 538058.5 548453.5 471793.3 500328.6 527795.6 548453.5 464103.5
[4,] 515905.7 543171.1 548453.5 475624.0 505533.7 532933.3 548453.5 467953.1
[,1] [,2] [,3] [,4] [,5]
[1,] 548453.5 537422.2 526574.8 515905.7 505533.7
[2,] 548453.5 548453.5 548453.5 538058.5 527795.6
[3,] 548453.5 548453.5 548453.5 548453.5 548453.5
[4,] 500000.0 491701.3 483577.3 475624.0 467953.1