我一直试图找到一种获取特定数量CSV的行数的方法。我可以让R输出一个文件的行数(减去NAs)。
但是当我尝试使用冒号操作符时,我不断收到错误:
Error in file(file, "rt") : invalid 'description' argument
我创建的拍卖:
complete <- function(directory,id = 1:332){
## 'directory is a character vector of length 1 indicating
## the location of the CSV files
## 'id' is an intiger vector indicating the monitor ID numbers
## to be used
## Return a data frame of the form:
## id nobs
## 1 117
## 2 1041
## ...
## where 'id' is the monitor ID and 'nobs' is the
## number of complete cases
filenames <- sprintf("%03d.csv", id)
filenames <- paste(directory, filenames, sep="/")
file1 <- read.csv(filenames)
n_row <- NROW(na.omit(file1))
output <- data.frame(id,nobs=n_row)
output
}
我尝试使用for循环来循环读取每个文件:
for (i in id){
filenames <- sprintf("%03d.csv", id)
filenames <- paste(directory, filenames, sep="/")
file1 <- read.csv(filenames)
n_row <- NROW(na.omit(file1))
output <- data.frame(id,nobs=n_row)
}
output
仍然出现错误:
Error in file(file, "rt") : invalid 'description' argument
我可以从这里获得的任何提示?
由于
答案 0 :(得分:1)
如果你有一个包含每个文件路径的向量filenames
,那么这样的东西应该有效:
fl = sapply(filenames, function(x) {
dat = read.csv(x)
return(data.frame(file=x, nobs=nrow(na.omit(dat))))
}, simplify=FALSE)
do.call(rbind, fl)
答案 1 :(得分:0)
如果您的文件命名为1.csv,2.csv,3.csv。
id=1:4
df=NULL
for (i in 1:length(id)) {
n_row<-NROW(na.omit(read.csv(paste0("C:/Users/fol/",id[i],".csv"))))
df=rbind(df,data.frame(id=id[i],nobs=n_row))
}