删除r中包含NA的列

时间:2015-10-11 20:35:54

标签: r loops for-loop

我希望获取代码并删除包含任何缺失值的列。所以我开发了这个for循环,但我陷入困境,因为我得到了错误,如下所示。我是R的新手,所以如果你能改进下面的for循环功能,我将不胜感激。谢谢你:

    "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')]
}
}

1 个答案:

答案 0 :(得分: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,]