2013-04-05 111 views
-2
k<-21; 

for(i in 5:k) 
{ 
pharma[,i][pharma[,i]=="#N/A"]<- NA 
pharma[,i][pharma[,i]=="NM"]<- NA 
num<-sum(is.na(pharma[,i])) 
n=1-num/length(pharma[,i]) 

if(n<0.8) { 
rm(pharma[,i]) 
Else n=0 
} 
} 

基本上试图用NA代替列并删除那些NA太多的列。for循环中的错误

+0

您可以扩展问题来解释错误发生的位置吗? – James 2013-04-05 12:16:20

+0

阅读它! http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – 2013-04-05 13:06:31

+0

downvoting由于忽视...将upvote如果改进。 – 2013-04-08 19:59:03

回答

2

您没有告诉我们代码创建的错误。但有几点意见:

  • R区分大小写。 Else不等于elseElse不正确
  • 您不关闭else之前的if语句。
  • 没有必要遍历列明确
+0

感谢Paul,找到了一条路,下面是新代码:for我在c(5:18)){ pharma [,i] [pharma [,i] ==“#N/A”] < - NA pharma [,i] [pharma [,i] ==“NM如果(n> 0.95)pharma1 <-merge(is.na(pharma [,i])) n <-1-num/length(pharma [,i]) m,pharma [,c(1,4,i)],all = TRUE) m <-pharma1 } – 2013-04-10 11:14:37

+1

如果这回答你的问题,我将它作为一个单独的答案添加它,描述你做什么来解决这种情况,张贴代码,并接受它作为正确的答案。 – 2013-04-10 11:22:59

1

你可能想东西

## extract the columns to manipulate 
pp <- pharma[,5:21] 
## set relevant values to NA 
pp <- lapply(pp,function(x) x[x %in% c("#N/A","NM")] <- NA) 
## estimate fraction NA and test 
badcols <- colMeans(is.na(pp))>0.2 
## remove bad columns 
pp <- pp[,!badcols] 
## put the manipulated stuff back together with the original structure 
pharma <- cbind(pharma[,1:4],pp) 

,但很难确切地告诉不重复的例子。