2015-10-11 143 views
0

我希望獲取代號並刪除那些包含缺失值的列。所以我開發了這個for循環,但我被卡住,因爲我得到保持錯誤,如下所示。我是R新手,所以如果能改進下面的for循環功能,我將不勝感激。謝謝:刪除包含NA的列

"Error in `==.default`(ETF_Adj_Data[columns], is.na(ETF_Adj_Data[,  columns])) : non-conformable arrays" 

install.packages("quantmod") library(quantmod)

sDate <- as.Date("2009-01-01") 
eDate <- as.Date("2014-12-31") 
ticker_symbol <- c("FLS","G4S","TDC") 
ETF_Data <- new.env() 
getSymbols(ticker_symbol, env=ETF_Data, from=sDate, to=eDate) 
# Extract the Adjusted column from all objects, 
# then merge all columns into one object 
ETF_Adj_Data <- do.call(merge, eapply(ETF_Data, Ad)) 
# then extract the monthly endpoints 
Monthly_ETF_Adj_Data <- ETF_Adj_Data[endpoints(ETF_Adj_Data,'months')] 

for (columns in ncol(ETF_Adj_Data)){ 
if (ETF_Adj_Data[columns]==is.na(ETF_Adj_Data[,columns])) { 
ETF_Adj_Data[columns] <- ETF_Adj_Data[,columns, drop=T]} 
else { 
Monthly_ETF_Adj_Data[columns] <-   ETF_Adj_Data[endpoints(ETF_Adj_Data,'months')] 
} 
} 
+0

也許'lapply(ETF_Adj_Data,函數(x)如果(任何(is.na(X )))endpoints(x,'months'))' – akrun

+0

@Boro Dega我運行了你的代碼,'Monthly_ETF_Adj_Data'中的所有三列至少包含一個NA值。你可以檢查這個[其他問題](http://stackoverflow.com/questions/31730990/return-only-columns-containing-na-in-r/31731474#31731474) – mpalanco

回答

2

試試這個:

#delete columns 
cok=apply(Monthly_ETF_Adj_Data,2,function(x)!any(is.na(x))) 
Monthly_ETF_Adj_Data[,cok] #empty 

#delete rows 
rok=apply(Monthly_ETF_Adj_Data,1,function(x)!any(is.na(x))) 
Monthly_ETF_Adj_Data[rok,] 
+0

行的情況下,也可以做更多簡單地用'complete.cases()'或'na.omit()'(如果有方法)。 –

+0

謝謝大家。但是,我想知道你是否可以修改上面的for循環函數..感謝很多@RichardScriven –