【发布时间】:2016-01-31 02:47:37
【问题描述】:
我是编程新手,并尝试在删除 NA 值后计算文件中的行数。该函数应返回一个数据框,其中第一列是文件名,第二列是完整案例的数量。
这是我的代码:
complete <- function(directory, id = 1:332){
setwd(directory)
df <- data.frame()
for (i in seq_along(id)){
if (id[i] < 10){
file_name <- paste("00",id[i],".csv", sep = "")
}
else if (id[i] >= 10 & id[i] < 100){
file_name <- paste("0",id[i],".csv", sep = "")
}
else{
file_name <- paste(id[i],".csv", sep = "")
}
file <- read.csv(as.character(file_name))
newfile <- na.omit(file)
#print(newfile)
df <- data.frame(id = id, nobs = nrow(newfile))
}
print(df)
}
当我像这样传入一个 1:3 的向量时:complete("specdata", 1:3) 我得到以下输出:
id nobs
1 243
2 243
3 243
其中 id 是列出的文件的文件数 1 到 332,nobs 等于完整案例的数量。
似乎它正在获取我的数据框中的最后一项并为每个 id 重复,我不知道如何解决它。作为初学者,我被这样的编程逻辑绊倒了。此外,我看到了一些其他解决这个问题的方法,但他们使用的是我不明白如何应用的 complete.cases。所以数据框中的每个 id 都应该有自己的完整案例计数(数据框中的 nobs 列)。
【问题讨论】:
-
无法重现您的代码,因此任何人都很难理解问题所在。但是,我认为您应该将这一行
df <- data.frame(id = id, nobs = nrow(newfile))替换为df <- data.frame(id = i, nobs = nrow(newfile))。一般建议:使用debug,这样您就可以逐步了解您的功能在做什么。 -
另外,也许 complete.cases 在这里更有意义?不完全确定。
-
问题不在
nrow(newfile),而在id=id。查看之前的评论。 -
嗨 Carlos,我将 id 更改为 i,很好。现在它返回正确数量的完整案例,但仅针对该特定 ID。如果我向它传递一个向量,我希望得到 ID 1、2 和 3 的一些完整案例,但它只给我最后一个 ID,即 3。
标签: r