我的程序用于计算文件中的缺失数据

时间:2012-05-23 12:52:30

标签: r

我创建了我的程序,用于计算超过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日

预期的输出应该是一个csv文件,第一个Col是文件名(每行都是一个文件),第二个Col是年遇到第一个NA,第三个是Col月,第四个是一天当NA被发现时,第五,第六和第七个Cols结束年份,Mm和Dd,当NA是最后一个。最后一个col是该时间范围的NA总数 因此,对于一个文件(例如File1.txt),从1981-1-13到1981-2-1可能有3天缺失数据,并且在最后一个col中我将获得此期间的NA数。 对于同一个文件,我可能稍后会有另一个NA周期(例如在1997年),因此在第三行我将再次拥有文件名,开始和结束时间段的周期以及多少个NA。 我希望这不会太混乱......

1 个答案:

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