我基本上试图创建一个NA和数字的向量,但是按照一个非常特殊的顺序。这是我到目前为止的代码:
x<-rep(rep(2:1,c(2,3)),40)
dummy=1
for (i in 0:length(x))
{ ifelse(x[i+1]==2, print(NA), print(dummy))
if(i %% 5 == 0) dummy=i+1
}
所以我的矢量应如下所示(NA,NA,1,1,1,NA,NA,6,6,6等)。但是我不能以这种格式保存它,所以我可以稍后在矩阵中调用它。有什么建议?我已经尝试创建一个没有任何东西的向量然后在循环中填充它,但这也无济于事。
利兹 统计学生
答案 0 :(得分:3)
在我有很多顽固之后,我已经学会完全将这些东西矢量化,不确定这对你的特殊情况是否有帮助,但我会写:
x<-rep(rep(2:1,c(2,3)),40)
通过以下方式获得x的领先优势:
leadx=c(x[-1],NA)
写下没有NAs时会得到的数字
filler=rep(5*0:7+1,each=5)
获取一个填充了NAs的正确大小的向量
y=rep(NA,length(x))
将填充物的值插入NA矢量
y[which(leadx!=2)]=filler[which(leadx!=2)]
请查看:
head(y)
> [1] NA 1 1 1 NA NA 6 6 6 NA
向量化的东西往往比for循环和if语句更快。祝你好运!
编辑:您可以使用以下命令在一行中完成所有操作:
y=ifelse(c(x[-1],NA)==2,NA,1)*rep(5*0:7+1,each=5)
答案 1 :(得分:2)
你需要将你的矢量分配给某个东西,而不是调用print
,否则它会打印到标准输出。
out <- vector(length=length(x))
for (i in 0:length(x)) {
out[i] <- ifelse(x[i+1]==2, NA, dummy)
if(i %% 5 == 0) dummy=i+1
}
> head(out, 10)
[1] NA 1 1 1 NA NA 6 6 6 NA
>