二淼441 2023-05-11 10:33 采纳率: 50%
浏览 12
已结题

R语言提取一个文件夹下所有CSV文件中几个特定列,但是个别CSV文件不存在某个列,如何以NA代替该不存在列?

想写一个循环提取1194个病例的十几个我需要的生化数据。大致分为三步:读取数据,提取数据,合并数据。代码如下:

setwd("D:/备份/试行")
a=list.files("D:/备份/试行")
dir=paste("./试行/",a,sep = "")
n=length(dir)
data1=read.csv(a[1],header=TRUE,stringsAsFactors = FALSE)
combine_data<-data.frame(data1['patname'],data1['patsex'],data1['patage'],data1['ndate'],data1['TBIL'],data1['DBIL'],data1['ALT'],data1['AST'],data1['CHE2'],data1['ALP'],data1['GGT'],data1['TP'],data1['ALB'],data1['HGB'],data1['PLT'],data1['WBC'],data1['AFP'],data1['UREA'],data1['CR'],data1['GLU'],data1['CPCO2'])

for (t in 2:n){
  data=a[t]
inturn.data<-data.frame(data['patname'],data['patsex'],data['patage'],data['ndate'],data['TBIL'],data['DBIL'],data['ALT'],data['AST'],data['CHE2'],data['ALP'],data['GGT'],data['TP'],data['ALB'],data['HGB'],data['PLT'],data['WBC'],data['AFP'],data['UREA'],data['CR'],data['GLU'],data['CPCO2'])
combine_table=rbind(combine_table,inturn.data)

最后报错选择了未指定的列,或变量的列数不对。
我找到了是个别病例的生化数据缺失,可能导致列数改变,但不知该怎么解决,如有想法望告知,感谢🙏!

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-11 12:56
    关注
    • 你可以看下这个问题的回答https://ask.csdn.net/questions/7727379
    • 除此之外, 这篇博客: 如何剪裁csv文件,并从中求出每一列的最大值和平均值,并将最大值和平均值添加到表的末尾中的 如何剪裁csv文件,并从中求出每一列的最大值和平均值,并将最大值和平均值添加到表的末尾 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    • 很少用python,第一次用python来处理csv文件,算是一个从无到有的过程吧,文中诸多地方可能有错,感谢指正!

    • 以下回答由chatgpt基于相关博客总结生成:

      我可以提供一个解决方案,可以分成以下几步:

      1. 设置工作目录和读取文件夹中的CSV文件列表
      setwd("文件夹路径")
      file_list <- list.files(pattern = ".csv")
      
      1. 创建一个空数据框
      merged_data <- data.frame()
      
      1. 循环读取文件夹中每个CSV文件,提取特定列,并且处理缺失值
      for (i in 1:length(file_list)){
        # 读取CSV文件
        data <- read.csv(file_list[i], stringsAsFactors = FALSE)
        # 提取特定列列名为例
        data <- data[, c("列名")]
        # 处理缺失值
        data[is.na(data)] <- "NA"
        # 将处理后的数据合并到空数据框中
        merged_data <- rbind(merged_data, data)
      }
      
      1. 手动处理缺失的列
      # 获取最大列数
      max_col <- max(sapply(merged_data, length))
      # 循环遍历每列,如果列数小于最大列数,则填充缺失值
      for (i in 1:max_col){
        merged_data[, i][is.na(merged_data[, i])] <- "NA"
      }
      
      1. 计算缺失值占比和合并数据
      # 计算缺失值占比
      missing_rate <- apply(merged_data, 2, function(x) mean(x == "NA"))
      # 合并数据,如果有重复行,则去重
      final_data <- unique(merged_data)
      

      所以,整个解决方案的代码如下:

      setwd("文件夹路径")
      file_list <- list.files(pattern = ".csv")
      merged_data <- data.frame()
      
      for (i in 1:length(file_list)){
        data <- read.csv(file_list[i], stringsAsFactors = FALSE)
        data <- data[, c("列名")]
        data[is.na(data)] <- "NA"
        merged_data <- rbind(merged_data, data)
      }
      
      max_col <- max(sapply(merged_data, length))
      for (i in 1:max_col){
        merged_data[, i][is.na(merged_data[, i])] <- "NA"
      }
      missing_rate <- apply(merged_data, 2, function(x) mean(x == "NA"))
      final_data <- unique(merged_data)
      

      希望这个解决方案对你有帮助!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月20日
  • 已采纳回答 5月12日
  • 创建了问题 5月11日

悬赏问题

  • ¥15 java代码写在记事本上后在cmd上运行时无报错但又没生成文件
  • ¥15 关于#python#的问题:在跑ldsc数据整理的时候一直抱这种错误,要么--out识别不了参数,要么--merge-alleles识别不了参数(操作系统-linux)
  • ¥15 PPOCRLabel
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败
  • ¥15 复合卡卡号轨道写入芯片卡