2015-12-26 24 views
0

我有一個庫(ISLR)的數據集,我想使自己的上漲和下跌,但我的if語句總是失敗,任何幫助將不勝感激:如果聲明表明市場是否漲跌

library(ISLR) 
attach(Smarket) 

for (i in 1:nrow(Smarket)){ 
    Smarket$myown =() 
    if (Smarket[i, "Today"]>0) { Smarket$myown = "Up" 
    } else { Smarket$myown = "Down" 
    } 
} 

請注意,如果我用ifelse那麼問題就解決了的說法,但我想你幫忙修改上面的代碼,所以我可以學習

Smarket$myown = ifelse(Smarket[, "Today"]> 0, "Up", "Down") 
+3

您需要使用指示符'i'來編寫變量sto myown',例如'Smarket $ myown [i] < - 」Up「'。還需要刪除'Smarket $ myown =()'這一行,因爲它沒用。 –

+0

謝謝,羅馬這是一個很好的幫助 –

回答

2

你靠近,但你錯過了實際上會創建你想要的列的索引。 ifelse正常工作,因爲它正在爲您編制索引。試試這個:

for (i in 1:nrow(Smarket)){ 
    if(Smarket[i, "Today"] > 0){ 
    Smarket$myown[i] = "Up" 
    }else{ 
    Smarket$myown[i] = "Down" 
    } 
} 

請注意,我不需要像你那樣初始化列「myown」。如果您正在創建一個全新的矢量,則需要,但是由於您要添加到現有的data.frame,因此沒有必要。另外請注意,每次將新值分配給「myown」時,都會有一個[i]。閱讀它:

「對於nrow(Smarket)中的每個項目,如果我的」今日「值大於零,則將」上「存儲在」myown「的第i個值中。否則,存儲」 Down「在第i項」myown「中

+0

非常感謝你給出了一個非常明確的解釋,這是一個令人尷尬的錯誤,但是如果我沒有問我會不知道:) –

+0

很高興你問! – Nancy