假设在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]=
}
现在我们需要一个新数组,比如说RE
,p1*1*1000
中的UE
元素的起始(RE
)仍然存在于p2*1*1000
但仍然存在({{ 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