在R中读取具有不同布局的多个Excel文件

在R中读取具有不同布局的多个Excel文件,r,excel,readxl,openxlsx,R,Excel,Readxl,Openxlsx,我收集了十几个excel文件,正在读取R中的数据帧列表,代码如下: data_path <- "path" files <- dir(data_path, pattern = "*.xlsx") data <- files %>% map(~readWorkbook(file.path(data_path, .), sheet = "Results")) 还有其他类似的: X1 2016 2017 2018 y 12

我收集了十几个excel文件,正在读取R中的数据帧列表,代码如下:

data_path <- "path"
files <- dir(data_path, pattern = "*.xlsx")

data <- files %>%
  map(~readWorkbook(file.path(data_path, .), sheet = "Results"))
还有其他类似的:

X1     2016     2017     2018
y       12       12       12
Result
y         2016       2017       2018
x          12         12         12
原因是某些excel文件转发给我时,在顶部会有一行附加字符串“Results”

现在我可以通过对每个人进行直接手术来解决这个问题:

names(data) <- rbind(data[1,])
names(data)[1] <- "X1"
data <- data[-c(1),]

或者在数据框中搜索日期行并将其用作列名

所以,我能想到的最简单的解决方案是这样的

首先,使用
colNames=FALSE导入
xlsx
文件,如下所示:

data <- files %>%
  map(~readWorkbook(file.path(getwd(), .), sheet = "Sheet1", colNames = FALSE))
请注意for循环内第一条语句中反向管道
%%
(来自包
magrittr
)的用法


注意:这将删除第一列中包含字符串“Result”的所有行。

使用
dplyr中的
filter()
,并执行类似于
data%>%filter(firstcol!=“Result”)
(我假设该字符串存储在第一列中,因为您提到将所有内容存储为数据帧).Dunois,它被存储为列标题,因为在读取数据时出现在第一行。我可以看到您来自何处,但不确定如何实现。没有解决整个问题,但肯定让我走上了正确的道路,谢谢。也是第一次了解反向管道函数的使用,这是一个额外的功能。on剩下的问题是命名数据帧,但这很复杂,因为它们有不同的列数(不喜欢收集这些数据的各种分析师),但我相信我可以通过指定导入级别要读取的列数来解决这个问题。
data <- files %>%
  map(~readWorkbook(file.path(getwd(), .), sheet = "Sheet1", colNames = FALSE))
for(i in 1:length(data)){
  data[[i]] %<>% filter(X1 != "Result") #Alternatively data[[i]] <- data[[i]] %>% filter(X1 != "Result")
  assign(paste0("FileName", i), as.data.frame(data[[i]]))
  names(paste0("FileName", i)) <- c("Names", "For", "Your", "Columns")
}