想写一个循环提取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)
最后报错选择了未指定的列,或变量的列数不对。
我找到了是个别病例的生化数据缺失,可能导致列数改变,但不知该怎么解决,如有想法望告知,感谢🙏!
我可以提供一个解决方案,可以分成以下几步:
setwd("文件夹路径")
file_list <- list.files(pattern = ".csv")
merged_data <- data.frame()
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)
}
# 获取最大列数
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)
所以,整个解决方案的代码如下:
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)
希望这个解决方案对你有帮助!
先确保你读入dir里面的文件都是表格文件,读入的时候可以保留空值,然后把空值NA转换成字符串“NA”,我也写过,不过我的是读xlsx,处理生存数据,可以参考下
empty_values <- is.na(all$Stage)
all$Stage[empty_values] <- "NA"