0

10,000 行を超えるファイルの欠落データをカウントするプログラムを作成しました (このようなファイルが 1700 個あります)。最後に、警告メッセージは次のように表示されます:「if ((b[i, 5] == NA) && (b[i, 1] > 1980)) { : TRUE/FALSE が必要な場所に値がありません」

コードは以下のように書かれています。

rm(list=ls())
setwd("C:\\Users\\.......")
a <- list.files();
n=0;
j=1;
mat <- matrix(data=NA,nrow=20000,ncol=8);
colnames(mat)<-c("Station","S.Year","S.Month","S.Day","E.Year","E.Month","E.Day","Count");
d<-matrix(data=NA,nrow=3,ncol=1);
for( k in 1:length(a) )
{
    b <- as.matrix(read.table(a[k],skip=7,header=F));
    t<-gsub(".txt","",a[k])

    for(i in 1:(length(b[,1])-1))

        {                     
        if((b[i,5]==NA)&&(b[i,1]>1980))
             {n=n+1;

            if(n==1)
            {d[1,1]=b[i,1]
            d[2,1]=b[i,2]
            d[3,1]=b[i,3]}

        if((b[i+1,5]!=NA)||(i==(length(b[,1])-1)))
            { if(n>10)
             {mat[j,1]=t;
              mat[j,2]=d[1,1]
              mat[j,3]=d[2,1]
              mat[j,4]=d[3,1]
              mat[j,5]=b[i,1]
              mat[j,6]=b[i,2]
              mat[j,7]=b[i,3]
              mat[j,8]=n;
              j=j+1;} 
            n=0;}                 


               }
          }
j=j+1;  
    }
write.csv(mat,"Count.csv", append = TRUE,row.names = FALSE)

なぜそのエラーメッセージが表示されるのですか? 多分私は何かを無視していますか?

データは気象観測所からのものであるため、次の構造になります。

YY MM DD Srad Tmax Tmin (雨) 1980 1 1 3 2 -3

2011 年 12 月 31 日まで続きます

予想される出力は、最初の列がファイル名 (各行がファイル)、2 番目の列が最初の NA が検出された年、3 番目の列が月、4 番目の列がその日付の csv ファイルである必要があります。 NA が見つかり、5 番目、6 番目、および 7 番目の列は、NA が最後である場合、終了年、Mm、および Dd です。最後の列は、その時間枠の NA の総数です。したがって、1 つのファイル (例: File1.txt) について、1981 年 1 月 13 日から 1981 年 2 月 1 日までの 3 日間のデータが欠落している可能性があり、最後の列にあることになります。この期間の NA の数。同じファイルに対して、後で (たとえば 1997 年に) 別の NA 期間がある可能性があるため、3 行目に再びファイル名、時間枠の開始と終了の期間、および NA の数が表示されます。これがあまり混乱しないことを願っています...

4

1 に答える 1

3

NA に対して "==" または "!=" であることはありません。代わりにis.na()またはを使用してください。!is.na()したがって、論理テストは次のようになります。

if ( is.na( b[i,5]) && ( b[i,1]>1980 ) )

if( !is.na(b[i+1,5]) || (i==(length(b[,1])-1)))
于 2012-05-23T13:15:14.027 に答える