在R中读取具有不同布局的多个Excel文件
我收集了十几个excel文件,正在读取R中的数据帧列表,代码如下:在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
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")
}