簡體   English   中英

在R中讀入多個不同布局的Excel文件

[英]Read in Multiple Excel Files with Different Layouts in R

我收集了十幾個 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 文件被轉發給我,頂部有一個額外的行,帶有字符串字符“結果”

現在我可以通過對每個人進行直接手術來解決這個問題:

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

但這似乎是一個相當丑陋的黑客解決方案,會導致自動化問題。 有沒有辦法使用 readWorkbook() function 但指定跳過包含某些值的行?

例如,也許是這樣的:

if value equal to 'Result' {
  skipRow()
}

或者在數據框中搜索日期行並將其用作列名?

所以,我能想到的最簡單的解決方案是這樣的。

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

data <- files %>%
  map(~readWorkbook(file.path(getwd(), .), sheet = "Sheet1", colNames = FALSE))

現在您需要做的就是 - 如果第一行在第一列中包含“結果”,則刪除第一行- 將每個xlsx文件分配給它自己的數據框(可選) - 為每個文件設置列名(可選)

這可以這樣做:

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")
}

請注意在 for 循環內的第一條語句中使用了反向 pipe %<>% (來自 package magrittr )。

注意:這將刪除第一列中包含字符串“Result”的所有行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM