-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 が多すぎる列を削除しようとしています。

4

2 に答える 2

2

コードが作成するエラーを教えてくれませんでした。しかし、いくつかの観察:

  • R は大文字と小文字を区別します。Elseは同じelseElseはなく、正しくありません
  • ifの前でステートメントを閉じませんelse
  • 列を明示的にループする必要はありません
于 2013-04-05T12:20:43.940 に答える
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)

しかし、再現可能な例がなければ正確に伝えるのは困難です。

于 2013-04-05T12:29:02.317 に答える