保留数组的一些起始元素并在R中将其他元素设置为零

时间:2015-06-24 11:56:45

标签: arrays r

假设在k*1*N的订单数组k=a+b中,我们希望保留该数组的第一个a元素并替换等于零的剩余b个元素,从而形成另一个相同顺序的数组(k*1*N)。我们怎样才能在R中实现这个目标?

示例

set.seed(51214)
library(mvtnorm)
library(Matrix)
library(abind)
library(arrayhelpers)
library(reshape2)
##########################################################
N=1000
n=200
##########################################################
p1=2
p2=3
p=p1+p2
##########################################################
B1=c(1.5,2.5)
B2=rep(0,p2)
B=as.matrix(c(B1,B2),nrow=n)
##########################################################
avg=rep(0,p) 
sig=diag(p)
##########################################################
X=array(data=NA,dim=c(n,p,N))
BB=array(data=NA,dim=c(p,1,N))
XB=array(data=NA,dim=c(n,1,N))
Zi=array(data=NA,dim=c(n,1,N))
Yi=array(data=NA,dim=c(n,1,N))
Dat=array(data=NA,dim=c(n,p+1,N))
UE=array(data=NA,dim=c(p,1,N))
DD=array(data=NA,dim=c(p,1,N))
RE=array(data=NA,dim=c(p,1,N))
##########################################################
for(i in 1:N){
            X[,,i]=rmvnorm(n,mean=avg,sigma=sig)
            BB[,,i]=B
            XB[,,i]=X[,,i]%*%BB[,,i]
            Zi[,,i]=1/(1+exp(-XB[,,i]))
            Yi[,,i]=rbinom(n,1,Zi[,,i])
            Dat[,,i]=abind(Yi[,,i],X[,,i])
            df=melt(Dat[,,i])
            df1=subset(df,select=c(value))
            DT=as.data.frame(matrix(df1$value,ncol=p+1))
            colnames(DT)=c("y","x1","x2","x3","x4","x5")
            fit=glm(y~x1+x2+x3+x4+x5+0,data=DT,family=binomial(link="logit"))
            UE[,,i]=as.matrix(fit$coefficients,ncol=5)
            RE[,,i]=
         }

现在我们需要一个新数组,比如说REp1*1*1000中的UE元素的起始(RE)仍然存在于p2*1*1000但仍然存在({{ 1}})为零。

1 个答案:

答案 0 :(得分:1)

要按照您想要的方式填充RE向量,您可以在循环内执行:

RE[1:p1, , i] <- UE[1:p1, , i] # fill the first p1 entries of first dimension with the same value as UE 
RE[(p1+1):(p1+p2), , i] <- 0 # fill the rest of the entries of first dimension with 0