我已经创建了我的程序来计算一个超过 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 是月份,第四个 Col 是遇到第一个 NA 时的日期找到 NA,第五、第六和第七列是结束年份,Mm 和 Dd,当 NA 是最后一个时。最后一列是该时间范围内的 NA 总数因此对于一个文件(例如 File1.txt),从 1981-1-13 到 1981-2-1 可能有 3 天的数据丢失,我将在最后一列此期间的 NA 数量。对于同一个文件,稍后(例如 1997 年)我可能会有另一个 NA 时期,因此在第三行我将再次有文件名、开始和结束时间框架的时期以及 NA 的数量。我希望这不会太混乱......