gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:26:45 26 4
gpt4 key购买 nike

我有十几个 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() 函数但如果它们包含某些值则指定跳过行?

例如,也许是这样的:
if value equal to 'Result' {
skipRow()
}

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

最佳答案

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

一、导入xlsx带有 colNames = FALSE 的文件像这样:

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

请注意反向管道的使用 %<>% (来自包 magrittr )在 for 循环内的第一条语句中。

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

关于在 R 中读取具有不同布局的多个 Excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58735440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com