我有许多csv文件,我的目标是找到id参数给出的一个文件或一组文件的完整案例数。我的函数应该返回一个数据框,其中列 id 指定文件和列 obs 给出此 id 的完整案例数。但是,我的函数覆盖了每个循环中nobs的先前值,并且生成的数据框仅给我最后一个值。您知道如何为每个id值获取nob的值吗?
myfunction<-function(id=1:20) {
files<-list.files(pattern="*.csv")
myfiles = do.call(rbind, lapply(files, function(x) read.csv(x,stringsAsFactors = FALSE)))
for (i in id) {
good<-complete.cases(myfiles)
newframe<-myfiles[good,]
cases<-newframe[newframe$ID %in% i,]
nobs<-nrow(cases)
}
clean<-data.frame(id,nobs)
clean
}
谢谢。
我们可以在 lapply()
内完成所有操作,如下所示(未经测试):
myfunction <- function(id = 1:20) {
files <- list.files(pattern = "*.csv")[id]
do.call(rbind,
lapply(files, function(x){
df <- read.csv(x,stringsAsFactors = FALSE)
df <- df[complete.cases(df), ]
data.frame(ID=x,nobs=nrow(df))
}
)
)
}