我编写了这个用于计数的代码iv,它读取一个充满文件的目录,并报告每个数据文件中完全观察到的情况的数量。函数应该返回一个数据帧,其中第一列是文件的名称,第二列是完整案例的数量。我需要帮助解决此代码中的错误,即:
[.data.frame(数据,i)中的错误:选定的未定义列 此外:警告信息: 1:在compi <- !is.na(datai)中:要替换的项目数不是替换长度的倍数 2:在compi <- !is.na(datai)中:要替换的项目数不是替换长度的倍数 3:在compi <- !is.na(datai)中:要替换的项目数不是替换长度的倍数
守则如下:
complete<-function(directory, id=1:332){
files.list<-list.files(directory, full.names=TRUE, pattern=".csv")
comp<-character()
return.data<-data.frame()
nobs<-numeric()
for(i in id){
data<-read.csv(files.list[i])
comp[i]<-!is.na(data[i])
nobs[i]<-nrow(comp[i])
}
return.data<-c(id,nobs)
}发布于 2016-10-20 16:31:05
您的问题是,!is.na()返回一个布尔向量而不是单个值,因此不能将多个元素插入到单个元素comp[i]中。
在R中,有一个函数complete.cases,它与您所尝试的完全相同。有了这个功能,您的功能将如下所示
complete<-function(directory, id=1:332){
files.list<-list.files(directory, full.names=TRUE, pattern=".csv")
nobs <- numeric(length(id))
for(i in id){
data<-read.csv(files.list[i])
nobs[i]<-sum(complete.cases(data))
}
return.data<-data.frame(id,nobs)
}撇开你的代码不谈,我想指出几个缺陷。
comp类型为characternobs <- numeric(length(id)))ith加载data.frame`的列data.frame`中缺少的值吗?return.data <- c(id,nobs),return.data将是一个数字向量,开头是ids,末尾是nobs。发布于 2016-10-20 08:28:26
您需要为您的数据提供索引。以便选择所有行和i列,例如compi<-!is.na(data,i)
https://stackoverflow.com/questions/40148427
复制相似问题