我有这个代码用于计数,用于读取一个充满文件的目录,并报告每个数据文件中完全观察到的案例的数量。该函数应返回一个数据框,其中第一列是文件的名称,第二列是完整案例的数量。我需要帮助解决此代码中的错误:
[.data.frame(data,i)中的错误:选择了未定义的列
另外:警告信息:
1:在comp [i]< - !is.na(data [i])中: 要更换的物品数量不是更换长度的倍数
2:在comp [i]< - !is.na(data [i])中: 要更换的物品数量不是更换长度的倍数
3:在comp [i]< - !is.na(data [i])中: 要替换的项目数量不是替换长度的倍数
代码如下:
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)
}
答案 0 :(得分:2)
您的问题是,!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
类型为character
?nobs <- numeric(length(id))
)i
加载的data.frame`中的i
列是否缺少值?return.data <- c(id,nobs)
return.data
将是一个数字向量,其开头为ids
,末尾为nobs
。答案 1 :(得分:0)
你需要为你的数据提供一个索引..所以它选择所有行和i column.e.g comp [i]&lt; - !is.na(data [,i])