使用R包在头文件之前使用垃圾文本整合多个.xlsx文件的问题(逐列):readxl并写入csv

我对R和编程非常陌生,需要帮助排列包含在〜2000.xls和.xlsx文件中的数据。 每个文件在头部之前以34-40行“垃圾”文本开始; 标题下的所有数据具有相同的尺寸。

第一种方法我尝试将数据添加到列表中; 垂直格式是没有用的。

library(readxl) file.list <- list.files(pattern='*.xls') dm.list <- lapply(file.list, read_excel) 

我正在尝试一次读入一个文件,删除“垃圾”文本,并写入一个.csv文件(逐列追加数据)。

 library(readxl) file.list <- list.files(pattern='*.xls') for(i in 1:dim.data.frame(file.list)) store.matrix <- read_excel((paste0("C:\\Users\\jlmine\\Desktop\\qPCRextData\\", file.list[i])), sheet = "Results") while (store.matrix[1,1] != "Well") #search for header { store.matrix <- store.matrix[-c(1)] } #delete non-header rows write.csv(store.matrix, file = "qPCRdataanalysis.csv", append = TRUE) 

以下行引发错误:

 store.matrix <- read_excel((paste0("C:\\Users\\jlmine\\Desktop\\qPCRextData\\", file.list[i])), sheet = "Results") 

错误:“C:\ Users \ jlmine \ Desktop \ qPCRextData”不存在。 另外:警告信息:1:dim.data.frame(file.list):
数值expression式有2个元素:只有第一个使用

“C:\ Users \ jlmine \ Desktop \ qPCRextData”被设置为我的工作目录任何想法将不胜感激。

没有访问您的.xlsx文件,问题似乎是在for循环语句。 list.files返回指定目录中文件的字符向量。 在长度为5的向量x上使用dim.data.frame会给你结果:

 #[0, 5] 

从你的警告信息,你知道只有第一个元素被用于for循环。 所以你没有循环任何事情。

所以,如果你想循环所有的文件更优雅,你会做…

 for (i in seq(length(file.list)) { 

我不能确定没有看到你的一些数据,但看起来你可以在每个文件中读取,find“真实”数据开始的行,然后删除“垃圾”行。 例如:

 df.list = lapply(file.list, function(f) { # Read file tmp = read_excel(f, sheet="Results") # Find highest index of row containing "Well" and add 1 (assuming here # that a row containing "Well" will come before the header row). s = which(apply(tmp, 1, function(x) {grep("Well", x)}) > 0) s = ifelse(length(s) > 0, max(s) + 1, 0) # Reset column names to the values in row s (the actual header row) # Remove rows 1 through s (the "junk" text plus the header row) from the data frame if(s > 0) { names(tmp) = tmp[s, ] tmp[-(1:s), ] } }) 

您现在将拥有df.list ,其中每个元素是您刚加载的xls / xlsx文件之一。 您说过要按列方式组合数据,但是如果每个数据框都有相同的列,那么您是不是想堆叠数据框? 要做到这一点,你可以这样做:

 df.list = do.call(rbind, df.list) 

您现在有一个数据框,您可以将其保存为csv文件。