You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正R语言中complete函数的行计数逻辑以匹配作业要求?

问题描述

需要统计指定PM监测点中sulfate和nitrate列均无NA值的观测数,预期输出每行对应一个监测点ID及其完整观测数,但现有代码每次迭代都返回结果,统计逻辑错误,输出重复不符合要求。

数据集包含332个CSV文件,文件名对应监测点ID(如200.csv对应ID200),每个文件含3个变量,部分观测有NA值需剔除。

现有代码:

complete <- function(directory, id = 1:332){
    path1<- setwd(paste("C:/Users/my_drive/Documents/Coursera/R", directory, sep= "/"))
    list1<- list.files(path1) 
    data1<- data.frame() 
    
for(i in id){
data1 <- rbind(data1, read.csv(list1[i])) 
data1 <- data1[complete.cases(data1),] 
    
I <- c(data1$ID) 
N <- c(data1$n) 
complete_data <- data.frame(id = I, nobs = N) 

print(complete_data) 
}}
修正后的代码
complete <- function(directory, id = 1:332) {
    # 初始化存储结果的数据框,指定列类型避免后续报错
    result <- data.frame(id = integer(), nobs = integer())
    
    # 逐个处理每个指定的监测点ID
    for (i in id) {
        # 自动生成3位数字的文件名(比如ID1转为001.csv)
        filename <- sprintf("%03d.csv", i)
        # 拼接出正确的文件路径,适配不同操作系统
        file_path <- file.path(directory, filename)
        
        # 读取当前监测点的CSV数据
        current_data <- read.csv(file_path)
        
        # 只筛选sulfate和nitrate都无NA的观测
        valid_rows <- complete.cases(current_data$sulfate, current_data$nitrate)
        
        # 统计有效观测的数量
        valid_count <- sum(valid_rows)
        
        # 将当前监测点的ID和有效数添加到结果中
        result <- rbind(result, data.frame(id = i, nobs = valid_count))
    }
    
    # 循环结束后统一返回结果
    return(result)
}
修正说明
  • 移除硬编码路径:原代码用setwd写死了本地路径,换成sprintf生成标准文件名、file.path拼接路径,既适配不同系统,又能准确匹配3位数字的CSV文件(比如ID5对应005.csv)。
  • 修复循环逻辑:原代码每次循环都把新数据合并到旧数据再过滤,导致之前的监测点数据被重复统计。现在改为单独处理每个监测点,统计完当前点的有效数就存入结果,各监测点数据互不干扰。
  • 精准筛选有效观测:用complete.cases(current_data$sulfate, current_data$nitrate)只检查目标两列,避免其他列的NA值影响统计结果。
  • 统一输出结果:原代码在循环内每次print导致输出混乱,现在把所有结果存在一个数据框里,循环结束后统一返回,符合每行对应一个监测点的预期格式。
  • 初始化结果结构:提前指定结果数据框的列类型,避免后续合并时出现类型不匹配的错误。

内容的提问来源于stack exchange,提问作者Nubie coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:13:27