2012-06-27 156 views
2

我基本上試圖創建一個NA和數字的矢量,但在一個非常特定的順序。這裏是我到目前爲止的代碼:在R中創建從循環矢量

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等)。但是我不能以這種格式保存,所以我可以稍後以矩陣的形式調用它。有什麼建議麼?我曾嘗試創建一個沒有任何東西的矢量,然後將它填充到循環中,但這也無濟於事。

利茲 統計學生

回答

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 
> 
+0

是啊......我想我的問題是規定在我試圖創建矢量長度和使用打印(NA)。謝謝你的幫助! –

3

很多我的一部分固執的後,我已經學會了完全矢量化這些東西,不知道這是否有助於您的具體情況,但我會寫:

x<-rep(rep(2:1,c(2,3)),40) 

讓你x的鉛搭配:

leadx=c(x[-1],NA) 

寫,如果沒有來港

,你會得到的數字

得到與具有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 

矢量化的東西往往比循環和if語句更快。祝你好運!

編輯:你可以做到這一切在同一行:

y=ifelse(c(x[-1],NA)==2,NA,1)*rep(5*0:7+1,each=5) 
+0

是的,我不熟悉填充函數,但我現在看到如何在這裏使用它對我有利。這是有道理的。謝謝你的幫助! –